数据库

数据库

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 条件

数据库基础.jpg

你可能感兴趣的:(数据库)