MySQL查询(一)
1. 基础查询
-
SELECT 查询列表 FROM 表名;
-
查询列表:可以是表中的字段、常量值、表达式、函数
-
查询结果是一个虚拟的表格,并没有保存下来
-
-
查询表中的单个字段
-
SELECT last_name FROM employees; #查询employees表格中的字段last_name
-
-
查询表中的多个字段
-
SELECT last-name,salary,email FROM employees; #查询employees表格中的字段last-name,salary,email
-
-
查询表中的所有字段
-
SELECT * FROM employees; #查询employees表格中的所有字段
-
-
查询常量值
-
SELECT 100; #查询100 SELECT 'john'; #查询john
-
-
查询表达式
-
SELECT 100%3;
-
-
查询函数
-
SELECT VERSION(); #查询版本
-
-
为字段起别名
两种方式:
-
SELECT 100%3 AS 结果; SELECT last_name AS 姓,first_name AS 名 FROM employees;
-
SELECT last_name 姓,first_name 名 FROM employees;
-
若别名中间有空格,可以用双引号括起来
-
别名可以便于理解;如果要查询的字段有重名的情况,可以使用别名区分
-
-
去重
例如查询员工表中涉及到的所有部门编号
-
SELECT DISTINCT department_id FROM employees;
-
-
+的作用
-
mysql中的+号只有一个功能,就是运算符,不能连接字符串。如果两个操作数有一个是字符型,则试图将字符转化为数值进行加法运算,若转换不成功,则将字符型转化为0。若只要有一方是null,则结果肯定是null
-
若要查询员工名和姓连接成一个字段,中间用空格隔开,并显示为姓名:
SELECT CONCAT(last_name,' ',first_name) AS 姓名 FROM employees;
-
-
ifnull(要进行判断的数据,若为空给它赋的值)
-
select ifnull(commission_pct,0) as 奖金率,commission_pct from employees;
-
2. 条件查询
-
条件查询的语法
SELECT 查询列表 FROM 表名 WHERE 筛选条件;
-
分类
-
按条件表达式筛选
条件运算符:> < = != <> >= <=
select * from employees where salary>12000; select last_name,department_id from employees where department_id<>90;
-
按逻辑表达式筛选
逻辑运算符:&& || ! 或者用and or not
select last_name,salary,commission_pct from employees where salary>=10000 and salary<=20000; #查询工资不低于1万不超过2万的员工的名字、工资、奖金率 select * from employees where department_id<90 or department_id>110 or salary>15000;
-
模糊查询
模糊查询通常与通配符一起使用。
%:可以表示任意多个字符,包括0个字符
_:表示一个字符
若遇到字符串中包含通配符,可以使用转义符\
like
select * from employees where last_name like '%a%'; #查找名字中包含字符a的所有员工信息 select * from employees where last_name like '__a_s%'; #查询名字中第3个字符是a,第5个字符是s的所有员工信息 select last_name from employees where last_name like '_\_%'; #查询名字中第二个字符是'_'的所有员工名
between and
select * from employees where employee_id between 100 and 120; #查询员工编号在100与120之间的所有员工信息,包含临界值,两个临界值不能颠倒顺序
in
select last_name,job_id from employees where job_id in ('AD_PRES','IT_PROG','PU_MAN'); #查找工种编号是列表中的三个工种的所有员工名字和工种编号
is null
select last_name,commission_pct from employees where commission_pct is null; #查找奖金率为空的所有员工的员工名和奖金率
<=>安全等于
select last_name,commission_pct from employees where commission_pct <=> null; #查找奖金率为空的所有员工的员工名和奖金率 select last_name,salary from employees where salary <=> 12000; #查找工资为12000的所有员工的名字和工资
-
3. 排序查询
-
排序查询的基本语法:
select 查询列表 from 表 [where 筛选条件] order by 排序列表 [asc 或 desc]
默认升序
-
示例
按字段排序:
select * from employees order by salary desc; #查询员工信息,按工资降序排序
增加筛选条件,按字段排序:
select * from employees where department_id>=90 order by hiredate; #查询部门编号大于等于90的员工信息,按入职日期先后排序
按表达式或别名排序:
select *,salary*12*(1+ifnull(commission_pct,0)) 年薪 from employees order by salary*12*(1+ifnull(commission_pct,0)) desc; #按年薪高低显示员工信息和年薪 select *,salary*12*(1+ifnull(commission_pct,0)) 年薪 from employees order by 年薪 desc;
按函数排序:
select length(last_name) 字节长度,last_name,salary from employees order by length(last_name) desc; #按姓名长度显示员工名字和工资
按多个字段排序:
select * from employees order by salary asc,employee_id desc; #先按工资升序,若工资一样,再按员工编号降序