SELECT 字段1,字段2
FROM 表名
WHERE 过滤条件
例:
SELECT *
FROM employees
WHERE department_id = 90; #过滤条件
SELECT *
FROM employees
WHERE last_name = 'king'; #不区分大小写
SELECT 100, 100 + 0, 100 - 0, 100 + 50, 100 + 50 -30, 100 + 35.5, 100 - 35.5
FROM dual;
注意:在JAVA,PYthon等语言中,出现字符串后,“+”为拼接,所以答案会变成1001,但是在SQL中会做一个隐式转换,会将字符串转换为数值,在加法运算。
SELECT 100 + '1'
FROM DUAL;
SELECT 100 + 'a'
FROM DUAL;
SELECT 100 + NULL
FROM DUAL;
SELECT 100,100 * 1,100 * 1.0,100/1.0,100/2,
100 + 2*5/2,100/3,100 DIV 0
FROM DUAL;
SELECT 12 % 3, 12 MOD 5 ,-12 % 5, -12 % -5
FROM dual;
比较运算符用来对表达式左边的操作数和右边的操作数进行比较,比较的结果为真则返回1,比较的结果为假则返回0,其他情况则返回NULL。
比较运算符经常被用来作为SELECT查询语句的条件来使用,返回符合条件的结果记录。
SELECT 1 = 2,1!=2,1 = '1',1 = 'a', 0 ='a'
FROM DUAL;
SELECT 'a' = 'a','a' = 'b'
FROM DUAL;
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct = NULL;
<=>与=类似,唯一区别是<=>可以对NULL进行判断,当两个操作数均为NULL,其值返回为1,而不为NULL;当一个操作数为NULL,返回0,不为NULL。
专门用于运算NULL。
SELECT 1 <=> NULL,NULL <=> NULL
FROM DUAL;
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct <=> NULL
不等于运算符(<>和!=)用于判断两边的数字、字符串或者表达式的值是否不相等,如果不相等则返回1,相等则返回0。不等于运算符不能判断NULL值。如果两边的值有任意一个为NULL,或两边都为NULL,则结果为NULL。
SELECT 1 <> 1, 1 != 2, 'a' != 'b', (3+4) <> (2+6), 'a' != NULL, NULL <> NULL;
四种查询空值的写法(ISNULL(列名)/IS NOT NULL/IS NUL):
# 4.4 ISNULL(列名)/IS NOT NULL/IS NULL:
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct IS NULL;
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;
SELECT last_name,salary,commission_pct
FROM employees
WHERE ISNULL(commission_pct);
SELECT last_name,salary,commission_pct
FROM employees
WHERE NOT commission_pct <=> NULL
# 4.5 LEAST(value1,value2,...)/GREATEST(value1,value2,...)
SELECT LEAST('G','B','T','M'),GREATEST('G','B','T','M')
FROM DUAL;
SELECT LEAST(first_name,last_name) #比较的是ASCII的值,并不是字符串长度
FROM employees;
SELECT LEAST(LENGTH(first_name),LENGTH(last_name))
FROM employees;
注意:条件上下届不可交换
# 4.6 BETWEEN ... AND
SELECT employee_id,last_name,salary
FROM employees
WHERE salary BETWEEN 6000 AND 8000;
# 4.7 IN/NOT IN
SELECT last_name,salary,department_id
FROM employees
WHERE department_id = 10 OR department_id = 20;
SELECT last_name,salary,department_id
FROM employees
WHERE department_id IN (10,20);
# 4.8 LIKE:模糊查询
# %:代表不确定个数的字符(0、多个)
# 查询包含‘a'的员工信息
# SELECT last_name
# FROM employees
# WHERE last_name LIKE '%a%';
# 查询以’a'开头的员工信息
# SELECT last_name
# FROM employees
# WHERE last_name LIKE 'a%';
# 查询包含'a'且包含'e'的员工信息
# SELECT last_name
# FROM employees
# WHERE last_name LIKE '%a%' AND last_name LIKE '%e%';
# WHERE last_name LIKE '%a%e%' OR last_name LIKE '%e%a%';
# 查询第二个字符是’a'
# "_"代表一个不确定的字符
# SELECT last_name
# FROM employees
# WHERE last_name LIKE '_a%';
# 查询第二个字符是'_'第三个字符是’a'
# 使用转义字符‘\’或者使用ESCAPE自定义转义字符
# SELECT last_name
# FROM employees
# WHERE last_name LIKE '_\_a%';
# WHERE last_name LIKE '_*_a%' ESCAPE '*';
语法:expr REGEXP 匹配条件 。如果expr满足匹配条件,返回1
逻辑非(NOT或!)运算符表示当给定的值为0时返回1;当给定的值为非0值时返回0;当给定的值为NULL时,返回NULL。
逻辑与(AND或&&)运算符是当给定的所有值均为非0值,并且都不为NULL时,返回
1;当给定的一个值或者多个值为0时则返回0;否则返回NULL。
逻辑或(OR或||)运算符是当给定的值都不为NULL,并且任何一个值为非0值时,则返
回1,否则返回0;当一个值为NULL,并且另一个值为非0值时,返回1,否则返回NULL;当两个值都为NULL时,返回NULL
逻辑异或(XOR)运算符是当给定的值中任意一个值为NULL时,则返回NULL;如果
两个非NULL的值都是0或者都不等于0时,则返回0;如果一个值为0,另一个值不为0时,则返回1。
# 4.10 逻辑运算符:或,且,非,异或(要么满足条件一要么满足条件二,不可同时都满足)
# SELECT last_name,salary,department_id
# FROM employees
# WHERE department_id = 10 AND department_id = 20;
# WHERE department_id = 10 OR department_id = 20;
# WHERE department_id = 50 && salary>6000;
# WHERE salary NOT BETWEEN 6000 and 8000;
# WHERE department_id = 50 XOR salary>6000;
OR可以和AND一起使用,但是在使用时要注意两者的优先级,由于AND的优先级高于OR,因此先对AND两边的操作数进行操作,再与OR中的操作数结合。