数据库
1. 查询(select)
条件:
- 不等于:< > 或 !=
格式:
select 字段1,字段2,...from 表名 where 条件1 连接符 条件2;
例:展示所有的查询结果
SELECT * FROM gy_student_chenjl;
2. 模糊查询 (like)
只对字符串类型的字段进行模糊查询:varchar,char
-
通配符:
% 代表0-n个任意字符
_ 代表1个任意字符
格式:
SELECT * FROM 表名 WHERE 字段名 LIKE '%目标字符%';
例:查询姓名中包含冬字的学生信息
SELECT * FROM customer WHERE name LIKE '%冬%';
3. 非 (not)
例: 查询姓名中不包含冬的学生信息
SELECT * FROM customer WHERE customer_name NOT LIKE '%冬%';
4. in
格式:
-
单个字段
select * from 表名 where 字段名 in (值1,值2,...);
例: 查询学生id 是77 88 99 111
SELECT * FROM customer WHERE customer_id IN (77,88,111);
-
多个字段
select * from 表名 where (字段1,字段2...) in ((值1,值2,...),(值1,值2,...)...);
例: 查询年龄不为23且省份不是重庆或者年龄不为29且省份不是安徽的所有学生信息;
SELECT * FROM customer WHERE (age,province) NOT IN ((23,'重庆'),(29,'安徽'));
5. 排序(order by)
规则:
- 升序:asc
- 降序:desc
格式:
-
单字段排序
select * from 表名 order by 排序字段 排序规则;
例: 查询出所有学生的信息并对年龄字段进行升序排序
SELECT * FROM customer ORDER BY age ASC; -
多字段排序
select * from 表名 order by 排序字段1 排序规则,排序字段2 排序规则...;
例: 查询出年龄大于19岁的所有学生并以年龄进行降序排序,如果有年龄相同的,以序号升序排序
SELECT * FROM customer WHERE age > 19 ORDER BY age DESC,customer_id ASC;
6. 返回记录(limit)
注意:
- limit只适用于MySQL中
- Oracle数据库中用rownum
- SQLsever数据库中用top
格式:
select * from 表名 limit n,m;
ps:n表示起始位置
m表示展现m条数据
数据库中查询结果是以0为起始序号
例: 查询出年龄大于19岁的所有学生并以序号进行降序排序取前10条记录
SELECT * FROM customer WHERE age > 19 ORDER BY customer_id DESC LIMIT 0,10;
7. 去重(distinct)
格式:
select distinct 字段名 from 表名;
例: 查询出所有学生的年龄并去重
SELECT DISTINCT age FROM customer;
8. 分组(group by)
聚合函数:
- 统计:count()
- 求和:sum()
- 平均:avg()
- 最大:max()
- 最小:min()
格式:
select 分组字段,统计函数 from 表名 group by 分组字段;
例: 统计出男生和女生的人数
SELECT sex,COUNT(sex) FROM customer GROUP BY sex;
9. 过滤(having)
ps:对聚合函数过滤需要使用having
普通过滤用where
格式
select 分组字段,聚合函数 from 表名 group by 分组字段 having 过滤条件;
例: 统计出选修人数少于2人的课程
SELECT cno,COUNT() FROM scores GROUP BY cno HAVING COUNT() < 2;
10. 增
-
插一行
insert into 表名 (字段1,字段2,...) value (值1,值2,...);
例: 新增一个学生,学生信息 小张,生日 2018-01-01,性别女
INSERT INTO Student (id,name,birth,sex) VALUE ('22','小张','2018-01-01','女'); -
插1-n行
insert into 表名 (字段1,字段2,...) values (值1,值2,...),(值1,值2,...);
例: 新增两个学生,学生信息 小张,生日 2018-01-01,性别女,小明,生日 2018-01-02,性别男
INSERT INTO Student (id,name,birth,sex) VALUE ('22','小张','2018-01-01','女'),('23','小张','2018-01-02','男'); -
扩展:
①把数据从一张表备份到另一张表中
insert into 目标表 select * from 数据源 where 条件
ps:两张表的结构必须完全相同
例:将score_112表备份到score_111表中
INSERT INTO score_111 SELECT * FROM score_112 WHERE s_id = '01';
insert into 目标表 (字段名1,字段名2,...) select (字段1,z字段2) from 数据源 where 条件
ps:不限制表结构
②建表:create table
③建数据库:create database
(db:数据库 dba(administrator):数据库管理员)
11. 删
ps: delete from 表名 清空整张表 但是结构还在
- delete from 表名 where 条件
例: 删除学号为110的学生信息
DELETE FROM student WHERE sno = '110'; - 连表删除(不能使用表别名)
delete 要删除的表名1,表名2 from 表名1,表名2 where 多表连接 and 条件
例: 请删除Betty的记录
DELETE Student,Achievement FROM Student JOIN Achievement ON Student.ID = Achievement.ID WHERE Student.Name = 'Betty'; - 扩展:
①清表:delete from 表名(只清除表数据,不清除表结构)
truncate table 表名(表全部清空)
②删表:drop table
③删库:drop database
12. 改
格式:
- update 表名 set 字段名1 = 字段值1,字段名2 = 字段值2 where 条件
例:将学号为110的性别改为男
UPDATE student SET ssex = '男' WHERE sno ='110'; - 扩展:
改表结构:alter
13. 备份
-
备份到临时表:
①条件不成立(where 1 = 2),则只备份表结构
create table 临时表名 as select * from 源表名 where 1 = 2;
②条件成立(where 1 = 1),则备份所有表数据
create table 临时表名 as select * from 源表名 where 1 = 1; - 备份成SQL脚本,右击表-->导出/备份-->SQL
- 备份成CSV文件
14. 多表关联
嵌套
select * from 表名 where 字段名 = (select 字段名 from 表名 where 条件)
例:查询 比王芳操作系统成绩高的所有学生
SELECT DISTINCT a.sname FROM student a,score c WHERE a.sno = c.sno AND c.degree > (SELECT c.degree FROM student a,course b,score c WHERE a.sno = c.sno AND b.cno = c.cno AND a.sname = '王芳' AND b.cname = '操作系统');where 关联(笛卡尔乘积)
select * from 表1 别名a,表2 别名b,表3 别名c where a.字段名 = b.字段名 and b.字段名 = c.字段名 连接符(and/or) 条件内连接(join on 或 inner join on)
select * from 表1 别名a join 表2 别名b on a.字段名 = b.字段名 join 表3 别名c on b.字段名 = c.字段 where 条件
例: 查询成绩>85分的学生的姓名
select a.Name from Student a join Achievement b on a.ID = b.ID where b.Mark > 85;左连接(left join)
select * from 表1 别名a left join 表2 别名b on a.字段 = b.字段 where 条件右连接(right join)
select * from 表1 别名a right join 表2 别名b on a.字段 = b.字段 where 条件全连接(full join)
select * from 表1 别名a full join 表2 别名b on a.字段 = b.字段 where 条件