常用操作
单字段查询:
select 字段名 from 表名;
多字段查询:
select 字段名,字段名 from 表名;
所有字段查询:
select * from 表名;
起别名
select 字段名 as 别名 from 表名;
去重
select distinct 字段名 from 表名;
+号
1.做加法运算
select 数值+数值 直接运算
select 字符+数值 首先试图将字符转换为数值,成功则继续运行,否则转化为0,继续运行
select null+值 结果为null
concat函数
拼接在一起
select concat (字符1,字符2…)
ifnull函数
判断是否为null,是 则返回指定值,不是 则返回原本值
select ifnull (id,0) from 表名
isnull函数
判断是否为null,是 返回1,不是 返回0
进阶1:基础查询
/*
语法
select 查询列表 from 表名
类似于System.out.println(打印东西);
查询列表可以是:表中的字段,常量,常量值,表达式,函数
查询的结果是一个虚拟的表格
*/
#启用库
USE myemployees;
#1.查询表中的单个字段
SELECT last_name FROM employees;
#2.查询表中的多个字段
SELECT last_name,email,salary FROM employees;
#3.1 查询表中的所有字段
SELECT `employee_id`,
`first_name`,
`last_name`,
`email`,
`phone_number`,
`job_id`,
`salary`,
`commission_pct`,
`manager_id`,
`department_id`,
`hiredate`
FROM employees;
#3.2 查询表中的所有字段
SELECT * FROM employees;
#4.查询常量值
SELECT 100 ;
#5.查询表达式
SELECT 98*10;
#6.查询函数
SELECT VERSION();
#7.起别名
/*
1.便于理解
2.如果要查询的字段有重名的情况,使用别名可以区分
*/
#方法1
SELECT 87*19 AS 结果;
SELECT last_name AS 姓,first_name AS 名 FROM employees;
#方法2
SELECT last_name 姓 FROM employees;
SELECT salary AS "out put" FROM employees;
8.去重
#例子:查询员工表所有部门编号
SELECT department_id FROM employees;
SELECT DISTINCT department_id FROM employees;
- "+"号的作用
/*
java中
1.运算符
2.连接符
mysql中
只有一个功能:运算符
select 28+32;两个操作数都为数值型,则做加法运算
select '2'+32; 其中有一方为字符型,则试图将字符型数值转换为数值型,如果从转换成功,则继续做加法运算
select 's'+32; 如果转换失败,则将字符型数值转换为0
select null+2; 只要其中一方为null,则结果为null
*/
#案例:查询员工名和姓连接成一个字段,并显示为姓名
# 错误 select last_name+first_name as 姓名 from employees;
SELECT CONCAT ('a','b','c') AS 结果;
SELECT CONCAT (last_name,first_name) AS 姓名 FROM employees;
#10.查看表的结构
DESC departments;
SELECT * FROM departments;
#11.
SELECT DISTINCT job_id FROM employees;
#12.显示出表employees的全部列,各个列之间用逗号链接,列头显示成 out_put
#ifnull 只能判断函数是否为空,IFNULL (commission_pct,0) 如果 commission_pct真的为null,返回0
SELECT
IFNULL (commission_pct,0) AS 奖金域 ,
commission_pct
FROM
employees;
#列中有 null
SELECT
CONCAT(`first_name`, ',' ,`last_name` , ',' ,`email`, ',' ,`commission_pct`) AS "out_put"
FROM
employees;
#进行改进
SELECT
CONCAT(`first_name`, ',' ,`last_name` , ',' ,`email`, ',' ,IFNULL (commission_pct,0)) AS "out_put"
FROM
employees;
/*
进阶2:条件查询
语法:
select
查询类表
from
表名
where
筛选条件;
执行顺序:先进入表中,执行筛选,然后找到要查询的类表
筛选条件分类:
1.按条件表达式筛选
条件运算符:<大于 >小于 =等于 <>不等 >= <=
2.按逻辑表达式筛选
逻辑运算符:&与 ||或 !非
and or not
3.模糊查询
like
between and
in
is null
*/
/*
按条件表达式筛选
*/
#1.查询工资>12000的员工信息
SELECT
*
FROM
employees
WHERE
salary>12000;
#2.查询部门编号不等于90的员工名和部门编号
SELECT
last_name,
department_id
FROM
employees
WHERE
department_id<>90;
/*
按逻辑运算符筛选
*/
#1.查询工资在1w到2w之间的员工名,工资,奖金
SELECT
last_name,
salary,
commission_pct
FROM
employees
WHERE
salary>10000
AND
salary<20000;
#4.查询部门编号不是在90到110之间的,或者工资高于15000的员工信息
SELECT
*
FROM
employees
WHERE
department_id<=90 OR department_id>=110 OR salary>15000;
/*
模糊查询
like
between and
in
is null
is not null
*/
# like
#1.查询员工名中包含字符a的员工信息
SELECT
*
FROM
employees
WHERE
last_name LIKE '%a%';
#使用%,代表a的前后都可能有字符
#2.查询员工名中第三个字符为s,第五个为i的员工名和工资
SELECT
last_name,
salary
FROM
employees
WHERE
last_name LIKE '__s_i%';
#3.查询员工名中第二个字符为_的员工名
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_\_%';
# \_: '\'为转义字符,
# between and(在。。。之间)
#1.员工编号在100-120之间的员工信息
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 100 AND 120;
# in
#查询员工的工种编号是 IT_PROG , AD_VP 中的一个的员工名和工种编号
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id IN ('IT_PROG' , 'AD_VP');
# is null
#没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NOT NULL;
#安全等于' <=> ' ,一般意义上的等于
#可以判断null值
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct <=> NULL;
#查询工资为12000的员工信息
SELECT
*
FROM
employees
WHERE
salary<=>12000;
#查询员工号为176的员工姓名,部门号,年薪
SELECT
last_name,
department_id,
salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM
employees
WHERE
employee_id = 176;
#选择工资不在5000到12000的员工的姓名和工资
SELECT
last_name,
salary
FROM
employees
WHERE
salary <=5000 OR salary>=12000;
#选择员工姓名第三个字母是a的员工姓名
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '__a%';
SELECT
*
FROM
employees
WHERE
first_name LIKE '%e';