
主要内容:基础查询,条件查询,排序查询
1.基础查询
/*语法:select 查询列表 from 表名特点:1-查询的结果集是一个虚拟表2-select类似于System.out.printIn(打印内容)select后面跟的查询列表,可以有很多个部分组成,中间用逗号隔开例如:select 字段1,字段2,字段3 from 表System.out.printIn()的打印内容只有一个3-执行顺序select first_name from employees222;a. from子句b. select子句4-查询列表:*/# 一、查询常量SELECT 100;# 二、查询表达式SELECT 100%3;# 三、查询单个字段SELECT `last_name` FROM `employees` ;# 四、查询多个字段,Fn+F12快速对齐格式SELECT`last_name`,`email`,`employee_id`FROM`employees` ;# 五、查询所有字段SELECT * FROM `employees`;# 六、调用函数、获取返回值# 查询当前数据库SELECT DATABASE();# 查询版本SELECT VERSION();SELECT USER();# 七、起别名# 方式一:使用as关键字SELECT USER() AS 用户名;SELECT USER() AS '用户名';SELECT USER() AS "用户名";#方式二:使用空格SELECT USER() 用户名;SELECT USER() '用户名';SELECT USER() "用户名";# 八、# 需求:查询first_name 和last_name 拼接的全名,最终起别名为:姓 名# 方案一SELECT first_name+last_name AS "姓 名"FROM `employees`;/*Java中+的作用:1.加法运算2.拼接符至少有一方为字符串MySQL中+的作用:加法运算*/# 方案二:使用concat拼接函数SELECT CONCAT (first_name,last_name) AS "姓 名"FROM `employees`;# 九、distinct的使用# 需求:查询员工涉及到的部门SELECT DISTINCT `department_id` FROM `employees`;# 十、查看表的结构DESC employees;SHOW COLUMNS FROM employees;基础查询案例# 1.下面的语句是否可以执行成功?SELECT last_name , job_id , salary AS salFROM employees;# 可以,换行没问题# 2.下面的语句是否可以执行成功?SELECT * FROM employees;# 可以,意思是查询所有字段# 3.找出下面语句的错误SELECT employee_id , last_name,salsry * 12 "ANNUAL SALARY"FROM employees;# 题中所有符号都应该用英文# 4.显示表departments的结构,并查询全部数据DESC departments;SHOW COLUMNS FROM departments;SELECT * FROM departments;# 5.显示出表employees中全部的job_id(不能重复)SELECT DISTINCT job_id FROM employees;# distinct 表示不能重复# 6.显示出表employees的全部列,各个列之间用逗号连接,列头显示为OUT_PUTSELECT CONCAT(employee_id , ',' ,first_name , ',' , last_name , ',' ,salary , ',' ,IFNULL(commission_pct , '')) AS "OUT_PUT" FROM employees;# concat表示拼接,但需要注意的是,拼接值中有NULL时,整体为NULL# 可以借用 ifnull:如果不是null,则返回参数1,如果是null,则返回参数2SELECT commission_pct , IFNULL(commission_pct , '空') FROM employees;
2.条件查询
/*语法:select 查询列表from 表名where 筛选条件;执行顺序:1.from 子句2.where 子句3.select 子句举例:select last_name , first_name from employees where salary>20000;特点:1.按关系表达式筛选关系运算符:< > >= <= <>2.按逻辑表达式筛选逻辑运算符:and(&&) , or(||) , not(!)3.模糊查询like , in , between and , is null*/# 一、按关系表达式筛选# 案例1:查询部门编号不是100的员工信息SELECT *FROM employeesWHERE department_id <> 100;#案例2:工资小于15000的姓名还有工资SELECT last_name , salaryFROM employeesWHERE salary < 15000;# 二、按逻辑表达式筛选# 案例1:查询部门编号不是 50-100 之间的员工的姓名、部门编号、邮箱# 方式1SELECT last_name , department_id , emailFROM employeesWHERE department_id<50 OR department_id>100;# 方式2SELECT last_name , department_id , emailFROM employeesWHERE NOT(department_id>=50 AND department_id<=100);# 案例2:查询奖金率>0.03 或者 员工编号在66-110之间的员工信息SELECT *FROM employeesWHERE commission_pct>0.03 OR (employee_id>=60 AND employee_id<=110);# 三、模糊查询# 1. like/*功能:一般和通配符搭配使用,对字符型数据进行部分匹配查询常见通配符:_ 任意单个字符% 任意多个字符*/# 案例1:查询姓名中包含字符a的员工信息SELECT *FROM employeesWHERE last_name LIKE '%a%';# 案例2:查询姓名中最后一个字符为e的员工信息SELECT *FROM employeesWHERE last_name LIKE '%e';# 案例3:查询姓名中第一个字符为e的员工信息SELECT *FROM employeesWHERE last_name LIKE 'e%';# 案例4:查询姓名中第3个字符为x的员工信息SELECT *FROM employeesWHERE last_name LIKE '__x%';# 案例5:查询姓名中第二个字符为_的员工信息SELECT *FROM employeesWHERE last_name LIKE '_\_%';# \ :转义字符# 也可以自己设置转义字符SELECT *FROM employeesWHERE last_name LIKE '_$_%' ESCAPE '$';# 2. in/*功能:查询某字段的值是否属于指定的列表之内a in(常量0,常量1,常量2,常量3,...)a not in(常量0,常量1,常量2,常量3,...)*/# 案例1 :查询部门编号是30,50,90的员工姓名,部门编号SELECT last_name , department_idFROM employeesWHERE department_id IN(30,50,90);# 案例2:查询工种编号不是SH_CLERK或IT_PROG的员工信息SELECT *FROM employeesWHERE job_id NOT IN ('SH_CLERK','IT_PROG');# 3. between and/*功能:判断某个字段的值是否介于xx之间*/# 案例1:查询部门编号是30-90之间的部门编号、员工姓名SELECT department_id ,last_nameFROM employeesWHERE department_id BETWEEN 30 AND 90 ;# 案例2:查询年薪不是100000-200000之间的员工姓名、工资、年薪SELECT last_name , salary , salary*12*(1+IFNULL(commission_pct, 0)) 年薪FROM employeesWHERE salary*12*(1+IFNULL(commission_pct, 0)) <100000 ORsalary*12*(1+IFNULL(commission_pct, 0)) > 200000;SELECT last_name , salary , salary*12*(1+IFNULL(commission_pct, 0)) 年薪FROM employeesWHERE salary*12*(1+IFNULL(commission_pct, 0)) NOT BETWEEN 100000 AND 200000;# 4. is null is not null# 案例1 :查询没有奖金的员工信息SELECT *FROM employeesWHERE commission_pct IS NULL;#案例2 :查询有奖金的员工信息SELECT*FROM employeesWHERE commission_pct IS NOT NULL ;# <=> : 安全等于,既能判断普通内容,又能判断null值# 课堂测试# 1.查询工资大于12000的员工姓名和工资SELECT last_name , salaryFROM employeesWHERE salary > 12000;# 2.查询员工工号为176的员工的姓名和部门号和年薪SELECT employee_id , last_name , department_id,salary*12*(1+IFNULL(commission_pct,0))年薪FROM employeesWHERE employee_id=176;# 3.选择工资不在5000到12000的员工的姓名和工资SELECT last_name , salaryFROM employeesWHERE salary NOT BETWEEN 5000 AND 12000;# 4.选择在20 或50 号部门工作的员工姓名和部门号SELECT last_name , department_idFROM employeesWHERE department_id IN(20 , 50);# 5.选择公司中没有管理者的员工姓名及job_idSELECT last_name , job_idFROM employeesWHERE manager_id IS NULL ;# 6.选择公司中有奖金的员工姓名,工资和奖金级别SELECT last_name , salary , commission_pctFROM employeesWHERE commission_pct IS NOT NULL ;# 7.选择员工姓名的第三个字母是a的员工姓名SELECT last_nameFROM employeesWHERE last_name LIKE '__a%';# 8.选择姓名中有a和e的员工姓名SELECT last_nameFROM employeesWHERE last_name LIKE '%a%' AND last_name LIKE '%e%';# 9.显示出表employees中first name 以 e 结尾的员工信息SELECT *FROM employeesWHERE first_name LIKE '%e';# 10.显示出表中部门编号在80-100之间的姓名、职位SELECT last_name,job_idFROM employeesWHERE department_id BETWEEN 80 AND 100;# 11.显示表中manager_id 是100,101,110的员工的姓名职位SELECT last_name , job_idFROM employeesWHERE manager_id IN (100 , 101 , 110);
3.排序查询
/*语法:select 查询列表from 表明where 筛选条件order by 排序列表执行顺序:1.from 子句2.where 子句3.select 子句4.order by 子句举例:select last_name , salaryfrom employeeswhere salary>10000order by salary ;特点:1.排序列表可以是单个字段、多个字段、表达式、函数、列数、以及以上的组合2.升序,通过asc,默认降序,通过deac*/# 一、按单个字段排序# 案例1:员工编号大于120的工资降序SELECT * FROM employees WHERE employee_id>120 ORDER BY salary DESC;# 二、按表达式排序# 案例1:对有奖金的员工,按年薪降序SELECT * , salary*12*(1+IFNULL(commission_pct,0))年薪FROM employeesWHERE commission_pct IS NOT NULLORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;# 三、按别名排序# 案例1:对有奖金的员工,按年薪降序SELECT * , salary*12*(1+IFNULL(commission_pct,0))年薪FROM employeesWHERE commission_pct IS NOT NULLORDER BY 年薪 DESC;# 四、按函数的结果排序# 案例1:根据姓名的字数长度进行升序SELECT LENGTH(last_name),last_nameFROM employeesORDER BY LENGTH(last_name);# 五、按多个字段进行排序# 案例1:查询员工的姓名、工资、部门编号、先按工资升序、再按部门编号降序SELECT last_name , salary , department_idFROM employeesORDER BY salary ASC , department_id DESC ;# 六、按列数排序SELECT * FROM employeesORDER BY 2;# 作业:USE myemployees# 1.查询员工的姓名和部门号和年薪,按年薪降序SELECT last_name , department_id , salary*12*(1+IFNULL(commission_pct , 0))年薪FROM employeesORDER BY 年薪 DESC;# 2.选择工资不在8000到17000的员工姓名和工资,按工资降序SELECT last_name , salaryFROM employeesWHERE salary NOT BETWEEN 8000 AND 17000ORDER BY salary DESC;# 3.查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,在按部门编号升序SELECT *FROM employeesWHERE email LIKE '%e%'ORDER BY LENGTH(email) DESC , department_id;
先写这么多,仅供参考,欢迎指点。
如果你有希望实现的内容,或者在过程中遇到了某些困难,欢迎交流探讨!
/如有纰漏 请联系我 十分感谢/

长按图片,点击关注
文章转载自三分稚气,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




