【mysql 基本语句 02】
前提:表信息
一、DQL语言
1、基础查询
进阶1、基础查询
/*
语法:
select 查询列表 from 表名;
类似于;sysyem.out.println(xxx);
特点:
1、查询列表可以是:表中的字段、常量值、表达式、函数
2、查询的结果是一个虚拟的表格
*/
#! 细节注意
USE myemployees;
#1、查询表中单个字段
SELECT last_name FROM employees;
#2、查询表中多个字段
SELECT last_name,salary,email 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 'join';
#5、查询表达式
SELECT 100*99;
#6、查询函数
SELECT VERSION();
# 7、起别名
/*
两种方式:
1、使用AS
2、使用空格
*/
#方式一:
SELECT last_name AS 姓,first_name AS 名 FROM 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 90+110; -->两个操作数都为数值型,则做加法运算操作 SELECT '90'+110; -->其中一方为字符型,试图将字符型数值转换成数值型,如果转换成功 SELECT 'join'+110; --> 则继续做运算,如果转换不成功,则将字符型数值转变成0 SELECT NULL+110; --> 只要其中一方为null,则结果肯定为null
#10、拼接,关键字 concat
SELECT CONCAT(last_name,first_name) FROM employees;
#11、如果有一列字段为空,可以把为null的字段设定为0,关键字:ifnull
SELECT IFNULL(commission_pct,0) AS 奖金率, commission_pct FROM employees;
这条语句的意思是:commission_pct为空时显示为0,不为空时显示本身数值
进阶2、条件查询
语法:select
查询列表
from
表名
where
筛选条件;
筛选条件分类:
一、按条件表达式筛选
条件运算符:> < = <> >= <=
二、按逻辑表达式筛选
逻辑运算符:
&& || !
and or not
&&和and:两个条件都为true,结果为true,反之为false
||或or:只要有一个条件为true,结果为true,反之为false
!或not:如果连接的条件本身为false,结果为true,反之为false
三、模糊查询
like 特点:1)一般和通配符搭配使用。"%"任意多个字符,包含0个字符;“_”任意单个字符
between and
in
is null
#1、按条件表达式筛选
#案例1、查询工资>12000的员工信息
SELECT * FROM employees WHERE salary>12000;
#案例2、查询部门编号不等于90号的员工名和部门编号
SELECT CONCAT(last_name,first_name) AS 姓名,department_id FROM employees WHERE department_id<>90;
#按逻辑表达式运算
#案例1:查询工资在10000到20000之间的员工名、工资以及奖金。
SELECT last_name,salary,commission_pct FROM employees WHERE salary>10000 AND salary<20000;
#案例2:查询部门编号不是在90到110之间,或者工资高于150000的员工信息
SELECT * FROM employees WHERE NOT(department_id>=90 AND department_id<=110) OR salary >15000;
#模糊查询
#LIKE
#案例1、查询员工名中包含字符a的员工信息 --》这里的%代表的是通配符的意思
SELECT * FROM employees WHERE last_name LIKE '%a%';
#案例2、查询员工名中第三个字符为n,第5个字符为l的员工名和工资
SELECT last_name,salary FROM employees WHERE last_name LIKE'__n_l%';
#案例3、查询员工名中第二个字符为_的员工名
SELECT last_name,salary FROM employees WHERE last_name LIKE'_\_%'; # '_\_%'中\是转义的意思 SELECT last_name,salary FROM employees WHERE last_name LIKE'_$_%' ESCAPE '$'; #'_$_%' ESCAPE '$' 中$是指定的转义的字符,后面ESCAPE '$'指明$是转义的字符
#between and
/*
1) 包含临界值
2)两个临界值不能调换顺序
*/
#案例1、查询员工编号在100到120之间的员工信息
SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120;
#in :用于去判断某字段的值是否属于in列表中的某一项。in列表中字段不支持通配符
#案例1、查询员工的工种编号是IT_prog、AD_VP、AD_PRES中 的一个员工名和工种编号
SELECT last_name,job_id FROM employees WHERE job_id IN('IT_PROD','AD_VP','AD_PRES');
#is null: is null 或is not null 可以判断null;=或<>不能判断null值
#案例1:查询没有奖金的员工名和奖金率
SELECT last_name,commission_pct FROM employees WHERE commission_pct IS NULL; 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,commission_pct FROM employees WHERE commission_pct <=> 12000;
#案例:查询员工号为176的员工姓名和部门号和年薪
SELECT last_name,department_id,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪 FROM employees;
last_name | department_id | 年薪 |
K_ing | 90 | 288000.00 |
Kochhar | 90 | 204000.00 |
#查询没有奖金,且工资小于18000的salary,last_name
SELECT salary,last_name,`commission_pct` FROM employees WHERE commission_pct IS NULL OR commission_pct = 0 AND salary<180000;
#进阶3:排序查询
/*
语法:
select 查询列表
from 表
[where筛选条件]
order by 排序列表 [asc|desc]
特点:
1、asc代表升序,desc代表降序,如果不写默认代表升序
2、order by 子句中可以支持单个字段,多个字段,表达式,函数,别名
3、order by 子句一般是放在查询语句的最后面,limit字句除外
*/
#案例:查询员工信息,要求工资从高到底
SELECT * FROM employees ORDER BY salary DESC;
#案例2、查询部门编号>=90的员工信息,按入职时间的先后进行排序
SELECT * FROM employees WHERE department_id>=90 ORDER BY hiredate;
#案例3、按年薪的高低显示员工的信息和年薪【按表达式排序】
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪 FROM employees ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC; SELECT *,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪 FROM employees ORDER BY 年薪 DESC;
#案例4、按姓名的长度显示员工的姓名和工资【按函数排序】
SELECT LENGTH(last_name) 字节长度,salary FROM employees ORDER BY LENGTH(last_name);
#案例5:查询员工信息,要求先按工资升序排序,在按员工编号降序排序【按多个字段排序】
SELECT * FROM employees ORDER BY salary ,department_id DESC; #表示先按salary升序排序,然后遇到salary有重复的在可以按照department_id降序排序
#案例6、选择工资不在8000到17000的员工姓名和工资,按工资降序
SELECT last_name,salary FROM employees WHERE NOT(salary BETWEEN 8000 AND 17000) ORDER BY salary DESC;
#案例7、查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,在按部门号升序
SELECT email,LENGTH(email)AS 邮箱长度,department_id FROM employees WHERE email LIKE '%e%' ORDER BY LENGTH(email) DESC,department_id;