第二章 DQL语言的学习一(基础、条件、排序查询)

第二章 DQL语言的学习一(基础、条件、排序查询)

准备工作

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

第一、在做查询时,需要打开指定的库,

第二、着重号,表示这是一个字段,

第三、执行的时候选中打算执行的命令。

2.1 基础查询

语法:选择、过滤、查看
select 查询列表 from 表名
特点:
(1)查询列表可以是:表中的字段、常量值、表达式、函数
(2)查询的结果是一个虚拟的表格

# 进阶1:基础查询
use myemployees;

#1.查询表中的单个字段
select last_name from employees;

#2.查询表中的多个字段
select last_name,email,salary from employees;

#3.查询表中的所有字段
#方式一
select
	`employee_id`,	`first_name`,		`last_name`, 
	`email`,		`phone_number`,		`job_id`,
	`salary`,		`commission_pct`,	`manager_id`,
	`department_id`,	`hiredate`
from 
	employees;

#方式二
select * from employees;

#4.查询常量值
select 100;
select 'john';

#5.查询表达式
select 100*98;
select 100%98;

#6.查询函数
select version();

7.为字段起别名
(1)便于理解
(2)如果要查询的字段有重名的情况,使用别名可以区分开来

#方式一
select 100%98 as 结果;
SELECT last_name AS,first_name ASFROM employees;

#方式二
select last_name 姓,first_name 名 from employees;

#案例:查询salary,显示结果为 out put
/* 如果别名中有特殊符号,例如空格等,加双引号 */
select salary as "out put" from employees;
#8.去重 distinct
#案例:查询员工表中涉及到的所有的部门编号
select distinct department_id from employees;

9.+号的作用
Java中+号的作用:
(1)运算符,两个操作数都为数值型
(2)连接符,只要有一个操作数为字符串

mysql中的+号:只有一个功能————运算符 select 100+90;
select ‘123’+90;其中一方为字符型,试图将字符型数值转换成数值型,如果转换成功,则继续做加法运算。
select ‘john’+90; 如果转换失败,则将字符型数值转换为0
select null+32;只要其中一方为null,则结果肯定为null

#案例:查询员工名和员工姓连接成一个字段并显示为 姓名
select last_name+first_name as 姓名 from employees;	#运行错误
# concat函数:拼接字符
select concat ('a','b','c') as 结果;
select concat (last_name,first_name) as 姓名 from employees;

课后习题

#1.下面的语句是否可以执行成功
SELEcT last_name ,job_id,salary AS sa1
FROM employees;

#2.下面的语句是否可以执行成功
SELECT * FROM employees;

#3.找出下面语句中的错误	使用了中文的双引号,','用了中文的
SELECT employee_id,last_name,
salary *12  "ANNUAL SALARY"
FROM employees;

#4.显示表departments的结构,并查询其中的全部数据
desc departments;
select * from departments;

#5.显示出表employees中的全部job id(不能重复)
select distinct job_id from employees;

#6.显示出表employees的全部列,各个列之间用逗号连接,列头显示成OUT_PUT
#ifnull函数:判断某字段或表达式是否为null,如果为null,返回指定的值,否则返回原本的值
select ifnull(commission_pct,0) as 奖金率,commission_pct from employees;

select concat(`first_name`,',',`last_name`,',',`email`,',',`phone_number`,',',
		`job_id`,',',`salary`,',',ifnull(commission_pct,0)) as out_put 
from employees;

2.2 条件查询

语法:
select 查询列表 from 表名 where 筛选条件;
执行顺序:先执行from表名,然后执行筛选条件,最后执行查询

分类:
1. 按条件表达式筛选(条件运算符:>、<、=、<>或!=不等于、>=、<=)
2. 按逻辑表达式筛选(逻辑运算符,用于连接条件表达式:与‘and &&’、或‘or ||’、非‘not !’)
3. 模糊查询(like、between and、in、is null)

#1.按条件表达式筛选
#案例1:查询工资>12000的员工信息
SELECT * FROM employees WHERE salary>12000;

#案例2:查询部门编号不等于90号的员工名和部门编号
SELECT `last_name`,`department_id` FROM employees WHERE department_id<>90;
#2.按逻辑表达式筛选
#案例1:查询工资在10000~20000之间的员工名、工资以及奖金
SELECT `last_name`,`salary`,`commission_pct` 
	FROM employees 
WHERE salary>=10000 AND salary<=20000;

#案例2:查询部门编号不是在90~110之间,或者工资高于15000的员工信息
SELECT * 
	FROM employees 
WHERE department_id<90 OR department_id>110 OR salary>15000;

3.模糊查询

like、between and、in、is null

(1)like,一般和通配符搭配使用

通配符:

  • &:任意多个字符,包含0个字符
  • _:任意单个字符,1个字符
#案例1:查询员工名中包含字符a的员工信息
SELECT * FROM employees WHERE last_name LIKE '%a%';

#案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
SELECT `last_name`,`salary` FROM employees WHERE last_name LIKE '__n_l%';

#案例3:查询员工名中第二个字符为_的员工名(通过转义的方式)
SELECT `last_name` FROM employees WHERE last_name LIKE '_$_%' ESCAPE '$';

(2)between and

​ ① 使用between and可以提高语句的简洁度

​ ② 包含临界值

​ ③ 两个临界值不能调换顺序

#案例1:查询员工编号在100~120之间的员工信息
SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120;
#----------------------------------
SELECT * FROM employees WHERE employee_id >= 100 AND employee_id <= 120;

(3)in

  • 含义:用于判断某字段的值是否属于in列表中的某一项
  • 特点: ①使用in可以提供语句简洁度
    ②in列表的值类型必须统一或兼容
    ③里面不能使用通配符
#案例1:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个的员工名和工种编号
SELECT `last_name`,`job_id` FROM employees WHERE job_id IN ('IT_PROT','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';

(4)is null

  • =或<>不能用于判断null值
  • is null或is not null可以判断null值

is null 和 <=> 对比

is null:仅仅可以判断null值,可读性较高(建议使用)

<=>:既可以判断null值,还可以判断普通的数值,可读性较低

#案例1:查询没有奖金的员工名和奖金率
SELECT `last_name`,`commission_pct` FROM employees WHERE commission_pct IS NULL;

#案例1:查询有奖金的员工名和奖金率
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;

#案例1:查询工资为12000的员工信息
SELECT * FROM employees WHERE salary <=> 12000;

课后习题:

#1.查询员工号为176的员工的姓名、部门号和年薪
SELECT last_name,department_id,
	salary *12*(1+IFNULL(commission_pct,0)) AS 年薪
	FROM employees 
WHERE employee_id=176;

#2.查询没有奖金,且工资小于18000的员工的工资和姓名
SELECT last_name,salary	FROM employees WHERE commission_pct IS NULL AND salary<18000;

#3.查询employees表中,job_id不为'IT'或者工资为12000的员工信息
SELECT * FROM employees WHERE job_id <> 'IT' OR salary=12000;

#4.查看部门department表的结构
DESC departments;

#5.查询部门department表中涉及到了哪些位置编号
SELECT DISTINCT location_id FROM departments;

/*6.select * from employees; 和
select * from employees where commission_pct like '%%' and last_name like '%%';
select * from employees where commission_pct like '%%' or last_name like '%%';
结果是否一样?并说明原因
不一样,如果判断的字段有null值,结果就不一样
第三行与第一行结果一样
*/

2.3 排序查询

  • 语法:

    SELECT 查询列表	FROM[WHERE 筛选条件]	ORDER BY 排序列表 ASC|DESC;
    
  • 特点:

    • ASC代表升序,DESC代表降序
    • 不写默认升序
    • ORDER BY子句中可以支持单个字段、多个字段、表达式、函数、别名
    • ORDER BY子句一般放在查询语句的最后。执行顺序:FROM、WHERE、SELECT、ORDER BY
#案例1:查询员工信息,要求工资从高到低排序
SELECT * FROM employees ORDER BY salary DESC;
SELECT * FROM employees ORDER BY salary ASC;

#案例2:查询部门编号>=90的员工信息,要求按入职时间先后排序(添加筛选条件)
SELECT * FROM employees WHERE department_id>=90 ORDER BY hiredate ASC;

#案例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 年薪 DESC;

#案例5:按姓名的长度显示员工的姓名和工资,按函数排序
SELECT LENGTH(last_name) 字节长度,last_name,salary
FROM employees
ORDER BY 字节长度 DESC;

#案例6:查询员工信息,要求先按工资升序排序,再按员工编号降序排序,按多个字段排序
SELECT *
FROM employees
ORDER BY salary ASC,employee_id DESC;

课后习题:

#1.查询员工的姓名、部门编号和年薪,按年薪降序,按姓名升序排列
SELECT last_name, department_id, salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY 年薪 DESC,last_name ASC;

#2.选择工资不在8000-17000的员工的姓名和工资,按工资降序排列
SELECT last_name,salary 
FROM employees
WHERE salary NOT BETWEEN 8000 AND 17000
ORDER BY salary DESC;

#3.查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序
SELECT * ,LENGTH(email)
FROM employees
WHERE email LIKE '%e%'
ORDER BY LENGTH(email) DESC,department_id ASC;
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值