语法:SELECT 要查询的东西【FROM 表名】;
,类似于Java中 :System.out.println(要打印的东西);
特点:
示例:
select 字段名 from 表名;
select 字段名,字段名 from 表名;
select * from 表名
select 常量值;
select 函数名(实参列表);
select 100/1234;
as
或者 空格
select distinct 字段名 from 表名;
+
select 数值+数值;
直接运算select 字符+数值;
先试 图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算select null+值;
结果都为nullselect concat(字符1,字符2,字符3,...);
select ifnull(commission_pct,0) from employees;
select isnull(commission_pct) from employees;
案例: 查询员工名和姓连接成一个字段,并显示为 姓名
SELECT CONCAT('a','b','c') AS 结果;
SELECT
CONCAT(last_name,first_name) AS 姓名
FROM
employees;
条件查询: 根据条件过滤原始表的数据,查询到想要的数据
语法:
select
要查询的字段|表达式|常量值|函数
from
表
where
条件 ;
分类:
#####案例1:查询工资>12000的员工信息
SELECT
*
FROM
employees
WHERE
salary>12000;
#####案例2:查询部门编号不等于90号的员工名和部门编号
SELECT
last_name,
department_id
FROM
employees
WHERE
department_id<>90;
#####案例1:查询工资z在10000到20000之间的员工名、工资以及奖金
SELECT
last_name,
salary,
commission_pct
FROM
employees
WHERE
salary>=10000 AND salary<=20000;
#####案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息
SELECT
*
FROM
employees
WHERE
NOT(department_id>=90 AND department_id<=110) OR salary>15000;
like
:一般搭配通配符使用,可以判断字符型或数值型。通配符:%任意多个字符,_任意单个字符between and
:包含边界,两个临界值不要调换顺序in
:判断某字段的值是否属于in列表中的某一项,注意:使用in提高语句简洁度;in列表的值类型必须一致或兼容;in列表中不支持通配符is null /is not null
:用于判断null值,但是=或<>不能用于判断null值#####案例1:查询员工名中包含字符a的员工信息
select
*
from
employees
where
last_name like '%a%';
#####案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
select
last_name,
salary
FROM
employees
WHERE
last_name LIKE '__e_a%';
#####案例3:查询员工名中第二个字符为_的员工名
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_$_%' ESCAPE '$'; #ESCAPE '$'表示 '$'后面的是转义字符
#####案例4:查询员工编号在100到120之间的员工信息
SELECT
*
FROM
employees
WHERE
employee_id >= 120 AND employee_id<=100;
#----------------------
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 120 AND 100;
#####案例5:查询员工的工种编号是 IT_PROG或者AD_VP或者AD_PRES的员工名和工种编号
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id = 'IT_PROT' OR job_id = 'AD_VP' OR JOB_ID ='AD_PRES';
#------------------
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id IN( 'IT_PROT' ,'AD_VP','AD_PRES');
#####案例6:查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NULL;
#####案例7:查询有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NOT NULL;
安全等于 <=>
####案例1:查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct <=>NULL;
#####案例2:查询工资为12000的员工信息
SELECT
last_name,
salary
FROM
employees
WHERE
salary <=> 12000;
is null 和 <=>比较
IS NULL:仅仅可以判断NULL值,可读性较高,建议使用
<=> :既可以判断NULL值,又可以判断普通的数值,可读性较低
语法:
select
要查询的东西
from
表
where
条件
order by 排序的字段|表达式|函数|别名 【asc|desc】
特点:
例子:
#1、按单个字段排序
#案例:查询员工信息 按工资降序
SELECT * FROM employees ORDER BY salary DESC;
#2、添加筛选条件再排序
#案例:查询部门编号>=90的员工信息,并按员工编号降序
SELECT *
FROM employees
WHERE department_id>=90
ORDER BY employee_id DESC;
#3、按表达式排序
#案例:查询员工信息 按年薪降序
SELECT *,salary*12*(1+IFNULL(commission_pct,0))
FROM employees
ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;
#4、按别名排序
#案例:查询员工信息 按年薪升序
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY 年薪 ASC;
#5、按函数排序
#案例:查询员工名,并且按名字的长度降序
SELECT LENGTH(last_name),last_name
FROM employees
ORDER BY LENGTH(last_name) DESC;
#6、按多个字段排序
#案例:查询员工信息,要求先按工资降序,再按employee_id升序
SELECT *
FROM employees
ORDER BY salary DESC,employee_id ASC;