目录
一、数据库操作
1.查看所有数据库
show databases;
2.查看当前使用的数据库
select database();
3.创建数据库
create databases 数据库名;
4.删除数据库
drop database 数据库名;
5.查看数据库中所有表
show tables;
二、表的操作
1.创建表
create table table_name(
字段名 数据类型 可选的约束条件);
2.增
(1)添加一条数据
insert into 表名1 (字段1,字段2) values(字段1值,字段2值);
(2)添加一列
alter table 表名 add 列名 数据类型 ;
3.删
(1)删除表中的数据
delete from table_name where 条件语句;
(2)删除表下的全部数据
1)不释放空间,保留表结构
下次插入表数据,id依然接着删除数据的id继续增加
delete from table table_name;
2)释放空间,保留表结构
下次插入表数据,id从1重新开始
truncate table 表名1;
3)释放空间,不保留表结构
drop table 表名1;
4.改
(1)修改数据
update table_name set column1=**,column2=** where 条件语句;
(2)插入列
alter table table_name add column_name datatype;
(3)删除列
alter table table_name drop column column_name;
***5.查
(1)查询某条件下的信息
select 查询字段 from 表名 where 查询条件
(2)对查询结果求最大值、最小值、和、平均值
最大值:max
最小值:min
和 :sum
平均值:avg
(3)对查询结果排序
desc是逆序排序,asc是正序排序,默认为正序排序
select * from 表名 where 条件语句 order by 排序依据 desc
(4)对查询结果求总数
1)不去重
select count (*) from 表名 where 范围
2)去重
select count (distinct 字段1) from 表名 where 范围
Count(*)包括了所有的列,在统计结果的时候不会忽略列值为null
Count(列名)只包括列名那一项,会忽略列值为空的计数
(5)对查询结果进行分组
根据某一个或多个列表字段进行分组统计
select 查询字段 as 查询结果列 from 表名 group by 分组依据
(6)联合查询
UNION(并) INTERSECT(交) EXCEPT(差)
SELECT 查询字段 FROM 表名
WHERE 条件1
UNION/INTERSECT/EXCEPT
SELECT 查询字段 FROM 表名
WHERE 条件2
(7)多表连接查询
连接查询是指在两个或两个以上的表中对符合某些条件的元组进行连接查询的操作
# 两个表连接,并去掉重复的列
SELECT 表1.*,表2.*
FROM 表1
JOIN 表2
ON 连接条件
(8)嵌套查询
select 查询字段 from 表名
where 字段1 >/in/not in
(
select 字段1 from 表名
where 条件
)
三、巩固练习
学了这么多语句,让我们一起学以致用叭!
- 按照department_id 查询 employees(员工表)和 departments(部门表) 的信息
SELECT e.last_name,e.department_id,d.department_name
FROM employees e,departments d
where e.department_id = d.department_id
- 某个表格存着s_name subject score 三个字段,比如某一行是 张三 数学 76,现在要选取出所有科目成绩都大于80分的学生名字
select s_name from table_name
where s_name
not in
(select s_name from table_name
where score <80)
select s_name from table_name
group by s_name having min(score)>80
- 学生表(学生id,姓名,性别,分数)student(s_id,name,sex,score)
班级表(班级id,班级名称)class(c_id,c_name)
学生班级表(班级id,学生id)student_class(s_id,c_id)
(1)查询一班得分在80分以上的学生
(2)查询所有班级的名称,和所有版中女生人数和女生的平均分
# (1)查询一班得分在80分以上的学生
select * from student
where score>80 and s_id=
(select sid from student_class
where c_id=
( select c_id from class where c_name= '一班' ))
# (2)查询所有班级的名称,和所有班中女生人数和女生的平均分
select c.c_name,女生人数= sum (s.s_id),平均分= avg (s.score)
from classes c
inner join student_class sc on sc.c_id=c.c_id
inner join students s on s.s_id=sc.s_idwhere s.sex= '女' group by c.c_name
- 表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列
select (case when a>b then a else b),(case when b>c then b else c)
- 有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路):
大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。
显示格式:
语文 数学 英语
及格 优秀 不及格
select
(case when 语文>=80 then '优秀'
when 语文>=60 then '及格'
else '不及格') as 语文,
(case when 数学>=80 then '优秀'
when 数学>=60 then '及格'
else '不及格') as 数学,
(case when 英语>=80 then '优秀'
when 英语>=60 then '及格'
else '不及格') as 英语,
from table
- user(id,name,age)查询 age 最大的人员中,id 最小的记录
select min(id) from user
where age=(select max(age) from user)