4、DQL数据查询语言(基础查询、条件查询、排序查询)

DQL数据查询语言

首先导入外部的一个sql文件。

输入SQL文件的位置,点击执行。导入成功后,刷新对象浏览器。

会发现多了一个myemployees的数据库。

认识数据库中的表

基础查询

# 进阶一、基础查询
/*
语法:
select 查询列表 from 表名;

1、查询出来的结果集是一张虚拟表,不是真实存在的;
2、执行顺序:①from字句; ②select字句;
3、查询列表 可以是:字段、表达式、常量、函数等
*/

-- 1、查询常量
SELECT 12;

-- 2、查询表达式
SELECT 100 % 3;
#1

-- 3、查询单个字段
SELECT `last_name` FROM `employees`;
#着重号``,代表列名、表名、库名

-- 4、查询多个字段
SELECT `first_name`, `last_name`, `email` FROM `employees`;

-- 5、查询所有字段
SELECT * FROM `employees`;

#F12对齐格式

-- 6、查询函数(调用函数,获取函数的返回值)
SELECT DATABASE();
#myemployees

SELECT VERSION();
#5.7.31-log

SELECT USER();
#root@localhost

-- 7、起别名
-- 7.1、as 别名 as "别名" as '别名' 7.2、空格 别名
SELECT USER() AS "username";

SELECT USER() "user";

-- 8、concat(str1, str2, ...)函数
-- 需求:拼接first_name和last_name组合为一个,以fullname显示
SELECT CONCAT(first_name, last_name) AS "fullname" FROM `employees`;
#在MySQL中不能使用+运算符来拼接字符串,+在MySQL中只有加法运算

-- 9、distinct关键字
-- 需求:查询员工所在的部门有哪些?
SELECT DISTINCT department_id FROM `employees`;
#上一次学distinct是在Stream流中,集合中Employee对象的去重

-- 10、查看表的结构
DESC `employees`;
SHOW COLUMNS FROM `employees`;

-- 11、ifnull()函数,如果参数一为null,就显示参数二
SELECT IFNULL(commission_pct, "空") FROM `employees`;

条件查询

# 进阶二、条件查询
/*
语法:
select 查询列表 from 表名 where 筛选条件;

1、查询顺序 ①from子句 ②where子句 ③select子句
2、筛选条件分类
2.1、按条件表达式(关系运算符:>、<、>=、<=、=、<>等)
2.2、按逻辑表达式(逻辑运算符:and、or、not)
2.3、模糊查询:like、in、between...and、is null
*/
-- 1、按条件表达式筛选
#部门编号不是100的员工信息
SELECT * FROM employees WHERE department_id <> 100;
#工资小于15000的姓名、工资
SELECT CONCAT(first_name, last_name) AS username, salary FROM employees WHERE salary < 15000;

-- 2、按逻辑表达式筛选
#部门编号不是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);
#奖金率大于0.03或者员工编号在60和110之间的员工信息
SELECT * FROM employees WHERE commission_pct > 0.03 OR (employee_id >= 60 AND employee_id <= 110);

-- 3、模糊查询like,一般用于字符型数据的部分匹配,一般和通配符搭配使用
#以前学的通配符是在Java泛型中Class<?>的?
#常见的通配符:_匹配任意单个字符,%匹配任意多个字符[0,无穷)
#last_name中包含字符a的员工信息
SELECT * FROM employees WHERE last_name LIKE '%a%';
#最后一个字符为e的员工信息
SELECT * FROM employees WHERE last_name LIKE '%e';
#第一个字符为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 '$';
#声明$为转义字符
#包含字符a和e的员工信息
SELECT * FROM employees
WHERE last_name LIKE '%a%e%' OR '%e%a%';

-- 4、in
/*
用于查询某字段的值是否属于指定的列表之内,in (常量值列表)
not in (常量值列表),不属于指定的列表之内
*/
#部门编号是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;
#工种编号不是IT_PROG或ST_CLERK的员工信息
SELECT * FROM employees WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK');

-- 5、between...and
/*
判断某个字段的值是否在某个区间
not between... and
*/
#部门编号是[30,90]之间的部门编号和员工姓名
SELECT last_name, department_id
FROM employees
WHERE department_id BETWEEN 30 AND 90;
#年薪不是10w-20w之间的员工姓名、工资、年薪
SELECT last_name, salary, (salary * 12 * (1 + IFNULL(commission_pct, 0))) AS "annualSalary"
FROM employees
WHERE (salary * 12 * (1 + IFNULL(commission_pct, 0))) NOT BETWEEN 100000 AND 200000;

-- 6、is null / is not null
#查询没有奖金的员工信息
SELECT * FROM employees WHERE commission_pct IS NULL;
#查询有奖金的员工姓名、工资和奖金率
SELECT last_name, salary, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;

排序查询

# 进阶三、排序查询
/*
语法:
select 查询列表
from 表名
[where 筛选条件]
order by 排序列表

1、执行顺序:①from子句 ②where子句 ③select子句 ④order by子句;
2、排序列表可以是单个字段、多个字段、表达式、别名、函数、列数以及以上的组合;
3、升序 asc ,默认
4、降序 desc
*/
-- 1、按单个字段排序
#员工编号大于120,并按工资升序排列
SELECT * FROM employees WHERE employee_id > 120 ORDER BY salary ASC;
#员工编号小于120,并按工资降序排列
SELECT * FROM employees WHERE employee_id < 120 ORDER BY salary DESC;

-- 2、按表达式排序
#对有奖金率的员工按年薪降序排序
SELECT *, salary * 12 * (1 + IFNULL(commission_pct, 0)) AS annualSalary 
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY salary * 12 * (1 + IFNULL(commission_pct, 0)) DESC;

-- 3、按别名排序
SELECT *, salary * 12 * (1 + IFNULL(commission_pct, 0)) AS annualSalary 
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY annualSalary DESC;
#where 筛选表达式中不能用别名,原因是执行顺序,别名是在select中写的,所以在where执行时不能用别名

-- 4、按函数的返回值排序
#根据姓名的字符个数排序
SELECT last_name , LENGTH(last_name) len
FROM employees
ORDER BY len ASC;

-- 5、按多个字段排序
#员工姓名、工资、部门编号,先按工资降序,再按部门编号升序
SELECT last_name, salary, department_id
FROM employees
ORDER BY salary DESC, department_id ASC;

-- 6、按列数排序
#按表中的第二列排序
SELECT * FROM employees ORDER BY 2 ASC;

猜你喜欢

转载自blog.csdn.net/ShawnYue_08/article/details/107808656