[玩转SQL]:02 条件语句与排序

SELECT 更高的用法可以使用WHERE提供查询条件.

WHERE语句

语法:

SELECT * | {[DISTINCT] column|expression [alias]...}
FROM   table
[WHERE condition(s)];

通过WHERE后边子句的表达返回True or False来判断是否满足条件.

WHERE子句不可以使用别名.

WHERE通常跟在FROM后边.

--查询deparment_id为90的列
SELECT employee_id,last_name, job_id, department_id
FROM   employees
WHERE  department_id = 90;

如果WHERE里边判断字符串或日期的条件需要使用单引号‘.

SELECT last_name,job_id, department_id
FROM   employees
WHERE  last_name = ‘Whalen‘;

条件中字符串型大小写敏感.

SELECT last_name,job_id, department_id
FROM   employees
WHERE  last_name = ‘WHALEN‘;

若不知道大小写可以使用upper或者lower函数

SELECT last_name,job_id, department_id
FROM   employees
WHERE  UPPER(last_name) = ‘WHALEN‘;
SELECT last_name,job_id, department_id
FROM   employees
WHERE  LOWER(last_name) = ‘whalen‘;

UPPER函数将需要查询的列全部转化为大写.

LOWER函数将需要查询的列全部转化为小写.

SQL比较表达式

= 等于
大于
>= 大于等于
< 小于
<=  小于等于

<>

不等于 也可以写成 != ^= 推荐使用!=

BETWEEN … AND …

大于等于某个值,小于等于某个值

IN(set)

判断是否在集合里边

LIKE

模糊查询

IS NULL


判断是否是NULL值

--查询月薪小于等于3000美金的员工
SELECT last_name,salary
FROM   employees
WHERE  salary <= 3000;

--查询大于等于2500美金或者小于等于3500美金的员工
SELECT last_name,salary
FROM   employees
WHERE  salary BETWEEN 2500 AND 3500;

--查询manager_id 等于 100 或者 101 或者 201的员工
SELECT employee_id,last_name, salary, manager_id
FROM   employees
WHERE  manager_id IN (100, 101, 201);

manager_id
IN (100, 101, 201)

等同于

manager_id = 100 OR manager_id= 101 OR manager_id = 201

若使用IN方式在运行时数据库自动转换为OR方式.

若注重可读性使用IN.

若注重速度使用OR.

匹配查询

% 匹配 0-N个字符

_ 匹配 1个字符

--查找first_name S开头的员工
SELECT first_name
FROM   employees
WHERE  first_name like ‘S%‘;

   

若要匹配的字符中包含特殊字符%或者_ 要进行ESCAPE指定的转义符转义.

--查找JOB_Id包含SA_的员工
SELECT employee_id,last_name, job_id
FROM   employees
WHERE  job_id LIKE ‘%SA\_%‘ ESCAPE ‘\‘;

--查找manager_id为null的员工
SELECT last_name,manager_id
FROM   employees
WHERE  manager_id IS NULL;

--查找manager_id不为null的员工
SELECT last_name,manager_id
FROM   employees
WHERE  manager_id IS NOT NULL;

逻辑运算符

AND OR NOT 与计算机"与或非"逻辑相同.

--查询职位为manager并且薪水大于等于10000美金的员工
SELECT employee_id,last_name, job_id, salary
FROM   employees
WHERE  salary >= 10000
AND    job_id LIKE ‘%MAN%‘;

--查询职位不是IT_PROG、ST_CLERK、SA_REP的员工
SELECT last_name,job_id
FROM   employees
WHERE  job_id
NOT IN (‘IT_PROG‘,‘ST_CLERK‘, ‘SA_REP‘);

运算符优先级

↑算数表达式

↑链接表达式

↑比较表达式

↑IS [NOT] NULL, LIKE, [NOT] IN

↑[NOT] BETWEEN

↑!= <> ^=

↑NOT

↑AND

↑OR

如果不确定优先级可以使用小括号来提高优先级.

ORDER BY排序


相同SQL查询的结果有时会返回的相同数据不同顺序的情况.

ASC  升序 (默认是此选项)

DESC 降序

ORDER BY 是放在SQL语句的最后边.

--查询入职时间并以升序排序
SELECT last_name,job_id, department_id,hire_date
FROM   employees
ORDER  BY hire_date;

ORDER BY 可以使用列别名

--查询所有员工的年终奖并以从高到底排列
SELECT employee_id,last_name, salary*12 lol
FROM   employees
ORDER BY lol DESC;

可简写为

SELECT employee_id,last_name, salary*12 lol
FROM   employees
ORDER BY 3 DESC;

数字对应colums出现的位置

ORDER BY可对应多个排序

--department_id升序排序,salary降序排列
SELECT last_name,department_id, salary
FROM   employees
ORDER  BY department_id, salary DESC;

若排序时出现NULL值

ASC  NULL放在最后

DESC NULL放在最开始

可通过NULLS FIRST 或者 NULLS LAST指定NULL值的位置.

引用变量

变量字符 & 或者 &&

SELECT employee_id,last_name, salary, department_id
FROM   employees
WHERE  employee_id = &employee_num;

每次执行会提示输入变量&employee_num的值.

若变量内容是字符串或者日期需要加上单引号

SELECT last_name,department_id, salary*12
FROM   employees
WHERE  job_id = ‘&job_title‘

一条SQL中可使用多个变量.

SELECT employee_id,last_name, job_id, &column_name
FROM   employees
ORDER  BY &column_name;

相同变量提示输入两次.

第一次出现用两个&&以后出现使用一个&即可.

SELECT employee_id,last_name, job_id, &&column_name
FROM   employees
ORDER  BY &column_name;

使用DEFINE定义变量可直接运行变量SQL语句.

设定verify OFF可以去除提示信息

[玩转SQL]:02 条件语句与排序

时间: 2024-10-11 13:41:41

[玩转SQL]:02 条件语句与排序的相关文章

Sql多条件排序

多条件排序可以通过在order by语句后面使用case when then条件语句来实现. select * from 表名 ORDER BY case when 条件 then 0 else 1 end 例子: 1.创建表case_test 共有id,case_type,case_location,case_way四个字段. 2.导入数据: INSERT INTO "XIANGZH"."case_test" VALUES ('1', '盗窃案', '台东', '

MySql常见数据类型,SQL执行顺序,条件语句,转储,查看表中字段属性

数据类型: 1 数字: Tinyint:小数据 用于保存一些范围的整数数值范围 有符号: -128-127 无符号: 0-255 int 整数 数据类型用于保存一些范围的整数数值范围 有符号: -2147483648--2147483647 无符号: 0-4294967295 Bigint 大整数 数据类型用于保存一些范围的整数数值范围: 有符号: -9223372036854775808--9223372036854775807 无符号: 0-18446744073709551615 floa

SQL 视图 局部变量 全局变量 条件语句 事务 触发器

一.视图 1.视图是一张虚拟表,他所存储的不是实际数据,而是查询语句,但我们可以对视图进行像数据表一样的操作. 2.为什么使用视图呢?我的理解是:1.在远程传输数据时,可以避免过长的查询字符,减少流量.2.他可以简化繁杂的多表嵌套查询语句.3.安全性,防止非法用户访问敏感数据,因为我们可以通过创建视图展示给用户,我们想要给他们查看的数据. 3.视图的创建 create view vw_city as select cityName from city --这个查询语句可以随便的写,如果是些多层次

sql 可按任意字段排序的分页存储过程

最近做一个项目,其中有许多部分需要用到分页功能 并且这些需要分页的地方有一个共同的特点,那就是,分页,但并不是按ID(主键)来排序,而是要求按其他有重复值的列进行排序,比如,其中有一个页面,要列出将近1万条客户记录,要求按客户付费金额进行排序,这种情况,如果使用网上流行的通用分页存储过程是行不能的,比如,像下面的分页存储过程虽然很棒,可是,用在这里的话,就无计可施:(这个存储过程是我在CSDN上看到一位前辈高人写的) CREATE PROCEDURE GetRecordFromPage @tbl

python 3 mysql sql逻辑查询语句执行顺序

python 3 mysql sql逻辑查询语句执行顺序 一 .SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <havin

自己整理的常用SQL Server 2005 语句、

--创建数据库 create database 数据库 go --打开数据库 use 数据库 --删除数据库 drop database 数据库 Go --创建数据表 create table 数据表 ( 列名1  数据类型1  限定条件(是否是主外键.是否为空), 列名2  数据类型2  限定条件(是否是主外键.是否为空) )go --删除数据表 drop table 数据表 --插入数据 --插入单行数据 insert  into 表名 [(列名1,列名2 )]  values  (‘数据1

SQL数据库基本语句

SQL特点--> 1)综合统一.SQL是集数据定义.数据操作和数据控制于一体,语言峰峰统一,可独立完成数据库生命周期的所有活动. 2)高度非过程化.SQL语言是高度非过程化语言,当进行数据操作时只需要指出“做什么”,无需指出“怎么做”,存储路径对用户来说是透明的,提高了数据的独立性. 3)面向集合的操作方式.SQL语言采用面向集合的操作方式,其操作队形.查找结果可以是元组的集合. 4)两种使用方式.第一种(自含式语言):用户可以在终端键盘输入SQL命令,对数据可进行操作:第二种(嵌入式语言):将

45、SQL逻辑查询语句执行顺序

一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <having_condition> ORDER BY <o

MySQL 抓取SQL慢查询语句

当MySQL服务器出现异常(慢),首先要考虑是否因,SQL语句引起数据库慢,如果情况比较紧急,我们就要立刻 SHOW FULL PROCESSLIST; 去查看,但我建议大家使用-e参数,采用非交互的方式,因为这样可以使用grep等命令,对结果进行过滤,更方便直观的看到结果 一.抓SQL慢查询语句的方法,有2种: 1,临时紧急抓取 通过SHOW FULL PROCESSLIST; 的方式,执行几次,有相同语句,就可能是SQL慢查询语句: SHOW FULL PROCESSLIST; #查看MyS