#1查看当前所有库
SHOW DATABASES;
#2打开指定库
USE myemployees;
#3查看当前库中的表
SHOW TABLES;
#4从当前库查看其他库的表
SHOW TABLES FROM mysql;
#5查看表的结构
DESC jobs;
#基础查询
#select 查询列表 from 表名
SELECT * FROM jobs;
SELECT min_salary FROM jobs;
SELECT job_title,min_salary FROM jobs;
#查询常量值
SELECT 'bi';
#查询表达式
SELECT 100*98;
#查询函数
SELECT VERSION();
#起别名
/*
1、便于理解
2、若查询字段有重名,则可以使用别名来区分
*/
SELECT 100*200 AS 结果;
SELECT last_name AS 姓,first_name AS 名 FROM employees;
#as可省略
SELECT last_name 姓,first_name 名 FROM employees;
#若别名有特殊符号,则将别名双引号
SELECT salary "out put" FROM employees;
#去重
SELECT DISTINCT department_id AS 部门编号 FROM employees;
#+的作用
/*
select 100+10; 俩个数都是数值型则做加法运算
select '100'+10; 若有一个字符型,试图将字符转换为数值型
若转换成功,则继续做加法运算
select 'ji'+10; 若失败 将字符型转换为0;
select null+ 10; 若一方为null则结果为null;
*/
#拼接字符串 concat( , , ,)
SELECT CONCAT(last_name,first_name) 姓名 FROM employees;
#判空函数 ifnull(判断的字段,若为空想要返回的值);
SELECT IFNULL(`commission_pct`,0) AS 奖金率,
`commission_pct`
FROM employees;
SELECT DISTINCT job_id FROM employees;
#拼接employees中所有列 由于`commission_pct`中有null所以要有判空函否则输出为空
SELECT CONCAT(`first_name`,',',`last_name`,',',`email`,',',`phone_number`,',',`job_id`,',',`salary`,
',',IFNULL(`commission_pct`,0),
',',`manager_id`,',',`department_id`,',',`hiredate`) OUT_PUT
FROM employees;
#条件查询
/*
select 查询列表 第三步
form 表名 第一步
where 筛选条件 第二步
根据筛选条件分类:
1、按照条件表达式筛选
条件运算符: < > + <>不等 = >= <=
2、按照逻辑表达式筛选
逻辑表达式:
连接条件表达式
&& || ! 与或非
and or not
3、模糊查询
like
一般和通配符搭配使用 %表示任意多个字符
_任意单个字符
between and
包含临界值 等于>=and<= 两个临界值不能调换顺序
in 等于 = or =
判断某字段的值是否属于in列表中的某一项
列表中的值类型统一或兼容
不可以配合通配符一起使用
is null /is not null
= <> 不能判断是否为NULL值
*/
#一、按照条件表达式筛选
#案例一: 查询工资大于12000的员工信息
SELECT * FROM employees WHERE salary >12000;
#案例二:查询部门编号不等于90号的员工名和部门编号
SELECT
CONCAT(last_name,first_name) AS "name" ,
department_id
FROM
employees
WHERE
department_id <> 90;
#二、按照逻辑表达式筛选
#案例三:查询工资在10000到20000之间的员工名、工资以及奖金
SELECT
CONCAT(last_name,first_name) AS 'name',
salary,
IFNULL(commission_pct,0)
FROM
employees
WHERE
salary>10000 AND salary<20000;
#案例四:查询部门编号不是在90到110之间或者工资高于15000的员工信息
SELECT
*
FROM
employees
WHERE
department_id<90 OR department_id>110 OR salary>15000;
#或者 NOT department_id >=90 AND department_id <=110 OR salary >15000;
#模糊查询
#案例五:员工名中包含字符a的员工信息
SELECT
*
FROM
employees
WHERE
last_name LIKE '%a%' OR first_name LIKE '%a%';#%通配符
#案例六:查询员工中的第三个字符为e第五个字符为a的员工名和工资
SELECT
last_name,
salary
FROM
employees
WHERE
last_name LIKE '_a_a%';
#案例七:查询员工名中第二个字符为_的员工
SELECT *
FROM employees
WHERE last_name LIKE '_\_%';#\转义字符
SELECT *
FROM employees
WHERE last_name LIKE '_$_%'ESCAPE '$';#定义转义字符escape
#案例八:查询员工标号在100到120之间的员工信息
SELECT last_name,
department_id
FROM employees
WHERE department_id BETWEEN 100 AND 120; #department_id >=100 and department_id<=120;
#案例九:查询员工的工种编号的IT_PROG、AD_VP、AD_PRES中的一个员工名和员工编号
SELECT last_name,
job_id
FROM employees
WHERE job_id IN ('IT_PROG','AD_VPm','AD_PRES');#等于job_id='IT_PROT' OR job_id='AD_VP' OR job_id ='AD_PRES';
#案例十:查询没有奖金的员工名和奖金率
SELECT last_name,
commission_pct
FROM employees
WHERE commission_pct IS NULL;#不能写成commission_pct=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;
SELECT last_name,
commission_pct
FROM employees
WHERE commission_pct <=> 0.3;
#测试一:查询员工号为176的员工姓名和部门号和年薪
SELECT last_name,
department_id,
salary*(1+IFNULL(commission_pct,0))*12 AS 年薪
FROM employees
WHERE employee_id=176;