MySQL启动
net start mysql
登陆本机MySQL
mysql -u root -p
退出mysql exit
创建数据库
create database sun;
删除数据库
drop database sun;
展示所有数据库
show databases;
使用数据库
use sun;
将两个表组合
编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:
FirstName, LastName, City, State
select FirstName,LastName,City, State //选定需要列 from Person left join Address //采用left join是因为Address不是每个人都有的 on Person.PersonId = Address.PersonId;
交换工资
给定一个salary表,需要把左图中sex m的变成f,f变成m 使用update语法
update salary set sex = case sex when 'm' then 'f' else 'm' end;
找出有趣的电影
找出所有影片描述为非 boring
(不无聊) 的并且 id 为奇数 的影片,结果请按等级 rating
排列。
select * from cinema where mod(id,2) =1 and description != boring order by rating desc;
mysql limit 分页
列1:select * from student limit 9,4
列2:select * fron student limit4 offset 9
列1和列2都表示返回表student中的第10,11,12,13行
DISTINCT 去重
mysql查询某个字段不重复的元素 ,有distinct这个关键字过滤掉重复记录只保留一条,distinct只能返回它的目标字段,无法返回其它字段
如 table
id name
1 a
2 b
3 c
4 c
5 b
select distinct name from table
得到结果为
name
a
b
c
我如果想要得到a,b,c对应的id
select distinct name,id from table 不行因为会根据name +id 都一样来过滤
GROUP BY 用法分析
某个员工信息表结构和数据如下: group by可以通过根据给定数据列的每个成员对查询结果进行分组统计得到一个分组汇总表
staff 表
id name dept salary edlevel hiredate
1 张三 开发部 2000 3 2009-10-11
2 李四 开发部 2500 3 2009-10-01
3 王五 设计部 2600 5 2010-10-02
4 王六 设计部 2300 4 2010-10-03
5 马七 设计部 2100 4 2010-10-06
6 赵八 销售部 3000 5 2010-10-05
7 钱九 销售部 3100 7 2010-10-07
8 孙十 销售部 3500 7 2010-10-06
1、查询每个部门的最高薪水
SELECT DEPT,MAX(SALARY) AS MAXIMUM
FROM STAFF
GROUP BY DEPT
查询结果如下
DEPT MAXIMUM
开发部 2500
设计部 2600
销售部 3500
说明:select必须有group by中选择处理的列dept
2、查询每个部门总的薪水数
SELECT DEPT,SUM(SALARY) AS TOTAL
FROM STAFF
GROUP BY DEPT
查询结果如下:
DEPT total
开发部 4500
设计部 7000
销售部 9600
3、寻找雇员平均工资大于3000的部门的最高和最低的薪水
SELECT DEPT, MAX(SALARY) AS MAXMUM ,MIN(SALARY) AS MINIMUM
FROM STAFF
GROUP BY DEPT
HAVING AVG(SALARY)>3000
ORDER BY DEPT
查询结果如下:
DEPT MAXIMUM MINIMUM
销售部 3500 3000
4、查询公司2010年入职的各个部门每个级别里的最高薪水
SELECT DEPT,EDLEVEL,MAX(SALARY) AS MAXIMUN
FROM STAFF
WHERE HIREDATE > "2010-01-01"
GROUP BY DEPT,EDLEVEL
ORDER BY DEPT,EDLEVEL
查询结果如下:
DEPT EDLEVEL MAXIMUM
设计部 4 2300
设计部 5 2600
销售部 5 3000
销售部 7 3500
在group by中指明的每个列名也需在select中提到