语法:select 查询列表 from 表名;
类似于:System.out.println(打印东西);
特点:
1、查询列表可以是:表中的字段、常量值、表达式、函数
2、查询的结果是一个虚拟的表格
建议在首句写上 “USE 库名;”语句。表示在此库中查询。
SELECT last_name FROM employees;
SELECT last_name,email,salary FROM employees;
SELECT
`first_name`,`last_name`,`email`,`phone_number`,`job_id`,`salary`,`commission_pct`,`manager_id`,`department_id`,`hiredate`
FROM
employees;
``不是单引号,是着重号,代表一个字段。可去掉。用于区分字段和关键字。
方式二:
SELECT * FROM employees;
SELECT 100;
SELECT 'join'; #MySQL中不区分字符和字符串
SELECT 100%98;
SELECT VERSION();
优点:
①便于理解
②如果要查询的字段有重名的情况,使用别名可以区分开来
方式一:
SELECT 100%98 AS 结果;
SELECT last_name AS 姓,first_name AS 名 FROM employees;
方式二:
SELECT last_name 姓 FROM employees;
案例:查询salary,显示结果为 out put
SELECT salary AS "out put" FROM employees;
out是关键字,所以要用双引号。
SELECT DISTINCT department_id FROM employees;
MySQL中的+号:
只有一个功能:运算符
SELECT 100+90; #190
两个操作数都为数值型,则做加法运算。
SELECT '123'+10; #133
SELECT 'join'+90; #90
SELECT null+10; #null
只要其中一方为字符型,试图将字符型数值转换成数值型,如果转换成功,则继续做加法运算;如果转换失败,则将字符型数值转换成0;只要其中一方为null,则结果为null。
案例:查询员工名和姓连成一个字段,并显示为 姓名
SELECT
CONCAT(last_name,first_name) AS 姓名 #CONCAT为一个函数
FROM
employees;
DESC 表名;
案例:显示出表employees的4列, 各列之间用逗号连接, 列头显示成OUT_PUT。
SELECT
CONCAT(`first_name`,',',`phone_number`,',',`job_id`,',',IFNULL(`commission_pct`,0)) AS OUT_PUT
#commission_pct可能为NULL,所以使用IFNULL函数使当commission_pct为NULL时显示为0
FROM
employees;
语法:
SELECT
查询列表 #第三步
FROM
表名 #第一步
WHERE
筛选条件; #第二步
分类:
#案例一:查询工资>12000的员工信息
SELECT
*
FROM
employees
WHERE
salary>12000;
#案例二:查询部门标号不等于90的员工名和部门编号
SELECT
`first_name`,`department_id`
FROM
employees
WHERE
department_id<>90;
#案例三:查询工资再10000到20000之间的员工名、工资及奖金
SELECT
`first_name`,`salary`,`commission_pct`
FROM
employees
WHERE
salary>=10000
AND
salary<=20000;
#案例四:查询部门编号不是在90到110之间,或工资高于15000的员工信息
SELECT
*
FROM
employees
WHERE
`manager_id`<90 OR `manager_id`>110 OR `salary`>15000;
SELECT
*
FROM
employees
WHERE
NOT(`manager_id`>=90 AND `manager_id`<=110) OR `salary`>15000;
like、between and、in、is null
1.like
特点:
案例1:查询员工名中包含字符a的员工信息
SELECT
*
FROM
employees
WHERE
first_name LIKE '%a%'; #字符必须要使用单引号,%代表一种通配符,代表是任一个字符。默认不区分大小写。
案例二:查询员工名中第三个字符为e,第五个字符为a的员工名和工资。
SELECT
first_name,
salary
FROM
employees
WHERE
first_name LIKE '__e_a%';
案例三:查询员工中第二个字符为_的员工的姓
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_\_%'; # 需要使用\进行转义
#last_name LIKE '_$_%' ESCAPE '$'; 可使用$代替\
2.between…and
案例一:查询员工编号在100到120之间的员工信息
SELECT
*
FROM
employees
WHERE
employee_id>=100 AND employee_id<=120;
#----------------------------
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 100 AND 120;
Notice:
①可提高语句的简洁度
②包含临界值
③两个临界值不要调换位置
3.in
含义:判断某字段的值是否属于in列表中的某一项。
特点:
①使用in提高语句简洁度
②in列表的值类型必须统一或兼容(存在隐式转换)
③不支持通配符
案例:查询员工的工种编号是IT_PROG、AD_VP、AD_PRES中的一个员工姓和工种编号
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id='IT_PROG' OR job_id='AD_VP' OR job_id='AD_PRES';
#------------------------------------------------------
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id IN ('IT_PROG','AD_VP','AD_PRES');
4.is null
=或<>不能用于判断null值,应使用 is null 或 is not null
案例:查询没有奖金的员工姓和奖金率
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;
5.<=>安全等于
案例:查询没有奖金的员工姓和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct <=> NULL;#不能用 =号直接判断,应用安全等于
案例:查询工资为12000的员工信息
SELECT
*
FROM
employees
WHERE
commission_pct <=> 12000;
is null PK <=>:
SELECT
`last_name`,
`department_id`,
`salary`*12*(1+IFNULL(`commission_pct`,0)) AS 年薪
FROM
employees;
SELECT
`last_name`,
`salary`,
`commission_pct`
FROM
employees
WHERE
`commission_pct` IS NULL AND `salary`<18000;
SELECT
*
FROM
employees
WHERE
job_id <> 'IT' OR salary=12000;
DESC departments;
SELECT DISTINCT
`location_id`
FROM
departments;
1.引入
SELECT * FROM employees;
2.语法:
SELECT 查询列表 ③
FROM 表 ①
[WHERE 筛选条件]②
ORDER BY 排序列表 [ASC|DESC];④
3.特点
(1)ASC代表升序,DESC代表降序,不写默认为升序;
(2)ORDER BY 子句中可以支持单个字段、多个字段、表达式、函数、别名;
(3)ORDER BY 子句一般放在查询语句的最后面,但LIMIT子句除外。
案例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 LENGTH(`last_name`) DESC;
案例6:查询员工信息,要求先按工资升序排序,再按员工编号降序排序(按多个字段排序)
SELECT *
FROM employees
ORDER BY `salary` ASC,`employee_id` DESC;
案例:查询员工的姓名和部门编号和年薪,按年薪降序,按姓名升序
SELECT `last_name`,`department_id`,salary*12*(1+IFNULL(`commission_pct`,0)) 年薪
FROM employees
ORDER BY 年薪 DESC,`last_name` ASC;
案例:选择工资不在8000到17000的员工的姓名和工资,按工资降序排序
SELECT last_name,salary
FROM employees
WHERE salary NOT BETWEEN 8000 AND 17000
ORDER BY salary DESC;
案例:查询邮箱中包含a的员工信息,并先按邮箱的字节数降序,再按部门号升序
SELECT *
FROM employees
WHERE email LIKE '%a%'
ORDER BY LENGTH(email) DESC,`department_id` ASC;