目录
二、条件查询——select 查询列表 from 表名 where 筛选条件
三、排序查询——select 查询列表 from 表名(where 筛选条件)order by排序列表
一、基础查询——select 查询列表 from 表名;
- 查询的结果集是一个虚拟表
- select后面跟的查询列表可以由多个部分组成,中间游逗号隔开,如:select 字段1,字段2,表达式 from 表
- 执行顺序:from→select
- 查询列表:字段、表达式、常量、函数等
#一、查询常量
select 100;
#二、查询表达式
select 100%3;
#三、查询单个字段
select `last_name` from `employees`;
#四、查询多个字段
select `last_name` ,`email`,`employee_id` from `employees`;
#五、查询表内所有的字段(字段顺序按表格顺序显示)
select * from `employees`;
#六、查询函数(调用函数,获取返回值)
select database(); #查询当前数据库
select user(); #查询当前用户
#七、起别名
#方式一 使用as
select user() as 用户名;
select user() as "用户名";
select user() as '用户名';
select last_name as "姓 名" from employees;
#方式二 用空格
select user() 用户名;
select user() "用户名";
select user() '用户名';
SELECT last_name "姓 名" from employees;
#八、拼接函数(+号及concat函数运用)
#需求:查询first_name和last_name 拼接成全名,最终起全名为:姓 名
#concat 函数
select concat(first_name,last_name) as '姓 名' from employees;
#拼接时若多个字段中,有某个字段为null,则拼接结果为null,可用ifnull 函数改善
#ifnull(表达式1,表达式2)
#如果表达式1为null,则显示表达式2,否则显示表达式1
select ifnull(commission_pct,'空') from employees;
*/mysql中+的作用:加法运算
①两个操作数都是数值型 100+1.5
②其中一个操作数字为字符型 将字符型数字强制转化为数字型,如果无法转换则当做0处理
“小甜甜”+100=100
③其中一个数为null,最终结果为null
null+null=null
1+null=null
#九、distinct 使用(去重)
#需求:查询员工涉及的部门都有哪些
select distinct department_id from employees;
#十、查看表结构
desc employees;
show columns from employees;
二、条件查询——select 查询列表 from 表名 where 筛选条件
- 执行顺序:from→where→select
- 按关系表达式筛选,关系运算符:< , > , <= , >= ,= , <>(!=)
- 按逻辑表达式筛选,逻辑运算符:and(与),or(或),not(非)
- 模糊查询:like , in ,between and, is null
#一、按关系表达式查询
#1.查询部门编号不是100的员工的信息
SELECT *
FROM employees
WHERE department_id <> 100;
#2.查询工资小于15000的员工姓名和工资
SELECT last_name,salary
FROM employees
WHERE salary<15000;
#二、按逻辑表达式筛选
#1.查询部门编号不是50-100之间的员工姓名、部门编号、邮箱
SELECT last_name,department_id,email
FROM employees
WHERE department_id<50 or department_id>100;
SELECT last_name,department_id,email
FROM employees
WHERE not(department_id>=50 and department_id<=100);
#2.查询奖金率大于0.03或者员工编号在60-110之间的员工信息
SELECT *
FROM employees
WHERE commission_pct>0.03 or (employee_id>=60 and employee_id<=100);
#三、模糊查询
#1. like子句
*/一般和通配符搭配使用,对字符型数据进行部分匹配查询
常见的通配符:
_ 任意单个字符
% 任意多个字符
*/
#①查询姓名中包含字符a的员工信息
SELECT *
FROM employees
WHERE last_name like '%a%';
#②查询姓名最后一个字符为e的员工信息
SELECT *
FROM employees
WHERE last_name like '%e';
#③查询姓名第三个字符为x的员工信息
SELECT *
FROM employees
WHERE last_name like '__x%';
#③查询姓名第二个字符为_的员工信息
SELECT *
FROM employees
WHERE last_name like '_\_%';
#定义$为转义字符
SELECT *
FROM employees
WHERE last_name like '_$_%' escape'$';
#2. in子句、not in子句
#查询某字段的值是否属于指定的列表之内、是否不在指定的列表之内
#案例1,:查询部门编号是30、50、90的员工名和部门编号
SELECT last_name,department_id
FROM employees
WHERE department_id in (30,50,90)
SELECT last_name,department_id
FROM employees
WHERE department_id =30
OR department_id =50
OR department_id =90
#案例2:查询工种编号不是ST_CLERK或IT_PROG的员工信息
SELECT *
FROM employees
WHERE job_id NOT IN('ST_CLERK','IT_PROG');
SELECT *
FROM employees
WHERE NOT (job_id='ST_CLERK'
OR job_id='IT_PROG');
#3. BETWEEN AND
#判断某个字段是否介于指定值之间
#案例1:查询部门编号是30-90之间的部门编号、员工姓名
SELECT department_id,last_name
FROM employees
WHERE department_id BETWEEN 30 AND 90;
SELECT department_id,last_name
FROM employees
WHERE department_id>=30 AND department_id<=90;
#案例2:查询年薪不是100000-200000之间的员工姓名、工资、年薪
SELECT last_name,salary,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM employees
WHERE salary*12*(1+IFNULL(commission_pct,0)) NOT BETWEEN 100000 AND 200000;
#4. IS NULL /IS NOT NULL
#判断null值
#案例1:查询年终奖金率为空的员工信息
SELECT *
FROM employees
WHERE commission_pct IS NULL;
SELECT *
FROM employees
WHERE commission_pct <=> NULL;
# <=> 安全等于,既能判断普通内容,又能判断null值
# = 只能判断普通内容
#案例2:查询年终奖金率不为空的员工信息
SELECT *
FROM employees
WHERE commission_pct IS NOT NULL;
三、排序查询——select 查询列表 from 表名(where 筛选条件)order by排序列表
- 执行顺序:from→where→select→order by
- 排序列表可以是单个字段、多个字段、表达式、函数、列数、以及以上的组合
- 升序:asc(默认行为);降序:desc
#一、按单个字段排序
#案例1:将员工编号>120的员工信息进行工资的升序
SELECT * FROM employees WHERE employee_id>120 ORDER BY salary ASC;
SELECT * FROM employees WHERE employee_id>120 ORDER BY salary ;
#二、按表达式排序
#案例1:对有奖金的员工,按年薪排序
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
WHERE salary*12*(1+IFNULL(commission_pct,0)) IS NOT NULL
ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;
#三、按别名排序
#案例1:对有奖金的员工,按年薪排序
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY 年薪 DESC;
#四、按函数结果排序
#案例1:按姓名的字数长度进行升序
SELECT last_name
FROM employees
ORDER BY LENGTH(last_name);
#五、按多个字段排序
#案例1:查询员工姓名、工资、部门编号,按工资升序,按部门编号降序
SELECT last_name,salary,department_id
FROM employees
ORDER BY salary ,department_id DESC;
#六、按列数排序
#案例1:按表格的第2列数据降序排序
SELECT *
FROM employees
ORDER BY 2 DESC;