4.DDL:操作数据库、表

4.1 操作数据库(CRUD)

4.1.1 创建数据库

  • 创建数据库【掌握】
    1. create database 数据库名称;
  • 创建数据库,判断不存在,再创建【掌握】
    1. create database if not exists 数据库名称;
  • 创建数据库,并指定字符集【了解】
    1. create database 数据库名称 character set 字符集名;
  • 练习: 创建db4数据库,判断是否存在,并指定字符集为gbk【了解】
    1. create database if not exists db4 character set gbk;

4.1.2 查询数据库

  • 查询所有数据库的名称【掌握】
    1. show databases;
  • 查询某个数据库的字符集:查询某个数据库的创建语句
    1. show create database 数据库名称;

4.1.3 修改数据库(慎重操作)

  • 修改数据库的字符集
    1. alter database 数据库名称 character set 字符集名称;

4.1.4 删除数据库(慎重操作)

  • 删除数据库
    1. drop database 数据库名称;
  • 判断数据库存在,存在再删除
    1. drop database if exists 数据库名称;

4.1.5 使用数据库

  • 查询当前正在使用的数据库名称
    1. select database();
  • 使用数据库
    1. use 数据库名称;

4.2 操作表(CRUD)

4.2.1 创建表(重点掌握)

  • 创建表

    • 语法

      1. create table 表名(
      2. 列名1 数据类型1 约束,
      3. 列名2 数据类型2 约束,
      4. ....
      5. 列名n 数据类型n 约束
      6. );


      注意事项: 最后一列,不需要加逗号(,)

    • 数据类型
      | 数据类型 | 说明 | | —- | —- | | int | 整数类型,例如 : age | | double | 小数类型,例如 : score double(5,2) 或 score double(5) | | date | 日期,只包含年月日,yyyy-MM-dd | | datetime | 日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss | | timestamp | 时间戳类型,包含年月日时分秒 yyyy-MM-dd HH:mm:ss 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值 | | varchar | 可变字符 name varchar(20) zhangsan | | char | 不可变字符 name varchar(20) zhangsan |

    • 案例: 创建学生(student)表

      1. create table student(
      2. id int,
      3. name varchar(32),
      4. age int,
      5. score double(4,1),
      6. birthday date,
      7. insert_time timestamp
      8. );
  • 复制表
    1. create table 表名 like 被复制的表名;

4.2.2 查询表

  • 查询某个数据库中所有的表名称
    1. show tables;
  • 查询表结构
    1. desc 表名;

4.2.3 修改表(慎重操作)

  • 修改表名
    1. alter table 表名 rename to 新的表名;
  • 修改表的字符集
    1. alter table 表名 character set utf8;
  • 添加一列
    1. alter table 表名 add 列名 数据类型;
  • 修改列名称以及数据类型
    1. alter table 表名 change 列名 新列别 新数据类型;
  • 修改列类型
    1. alter table 表名 modify 列名 新数据类型;
  • 删除列
    1. alter table 表名 drop 列名;

4.2.4 删除表(慎重操作)

  • 删除表
    1. drop table 表名;
  • 判断是否存在再删除表
    1. drop table if exists 表名;

5. DML:增删改表中数据(重点掌握)

5.1 添加数据

  • 语法
    1. insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
  • 注意事项 ```java
  1. 列名和值要一一对应。 表名(列名1,列名2,…列名n)写了几个字段,我们就给几个值,值的类型要跟字段类型保持一致
  2. 如果表名后,不定义列名,则默认给所有列添加值【了解】 insert into 表名 values(值1,值2,…值n);
  3. 除了数字类型,其他类型需要使用引号(单双都可以)引起来,推荐使用单引号 【建议大家都使用单引号 ‘’ 不要使用双引号】 4.批量插入数据 INSERT INTO stu1(id,name,sex,score,birthday,insert_time) VALUES (3,’李四1’,’男’,’11.0’,’2018-11-11’,NULL), (4,’李四2’,’男’,’11.0’,’2018-11-11’,NULL), (5,’李四3’,’男’,’11.0’,’2018-11-11’,NULL), (6,’李四4’,’男’,’11.0’,’2018-11-11’,NULL); ```

5.2 删除数据

  • 语法
    1. delete from 表名 [where 条件]
  • 注意事项 ```java
  1. 如果不加条件,则删除表中所有记录。
  2. 如果要删除所有记录
    • delete from 表名; — 不推荐使用。有多少条记录就会执行多少次删除操作
    • TRUNCATE TABLE 表名; — 推荐使用,效率更高 先删除表,然后再创建一张一样的表 ```

5.3 修改数据

  • 语法
    1. update 表名 set 列名1 = 1, 列名2 = 2,... [where 条件];
  • 注意事项
    1. 如果不加任何条件,则会将表中所有记录全部修改。

6.DQL:查询表中的记录(重点掌握)

6.1 查询语法

  1. select
  2. 字段列表
  3. from
  4. 表名列表
  5. where
  6. 条件列表
  7. group by
  8. 分组字段
  9. having
  10. 分组之后的条件
  11. order by
  12. 排序
  13. limit
  14. 分页限定
  • select 的特点:
    • select 可以查询 表中的字段 表达式 常量值 函数
    • 查询出的结果是一个虚拟表 不影响实际表中的数据

6.2 基础查询

  • 查询准备数据 ```sql CREATE TABLE stu ( id INT, — 编号 NAME VARCHAR(20), — 姓名 age INT, — 年龄 sex VARCHAR(5), — 性别 address VARCHAR(100), — 地址 math INT, — 数学 english INT — 英语 );

INSERT INTO stu(id,NAME,age,sex,address,math,english) VALUES (1,’马云’,55,’男’,’杭州’,66,78), (2,’马化腾’,45,’女’,’深圳’,98,87), (3,’马景涛’,55,’男’,’香港’,56,77), (4,’柳岩’,20,’女’,’湖南’,76,65), (5,’柳青’,20,’男’,’湖南’,86,NULL), (6,’刘德华’,57,’男’,’香港’,99,99), (7,’马德’,22,’女’,’香港’,99,99), (8,’德玛西亚’,18,’男’,’南京’,56,65);

  1. <a name="e8156c3c"></a>
  2. #### 6.2.1 查询所有记录
  3. ```sql
  4. select * from 表名;

6.2.2 查询指定字段

  1. select 字段名1,字段名2... from 表名;

6.2.3 去重查询

  • 关键字: **distinct**

例如: 去除地址重复的数据

  1. select distinct address from student;

6.2.4 计算列

  • ifnull(表达式1,表达式2)
    • 表达式1:哪个字段需要判断是否为null
    • 表达式2 : 如果该字段为null后的替换值。
    • 注意事项:
      • 在做行运算时,null参与的运算,计算结果都为null
      • SELECT ‘123’ + 100; — 223 如果能转换成整数就跟后面的数值进行相加
        SELECT ‘abc’ + 100; — 100 如果不能转换成整数 转换为0 在跟后面的数值进行相加
  • 例子
    1. select name,math,english,math+ifnull(english,0) from stu;

6.2.5 起别名

  • 语法
    1. asas也可以省略
  • 例子
    1. SELECT NAME as 姓名,math as 数学,english as 英语, math+IFNULL(english,0) AS 总成绩 FROM stu;

6.3 条件查询

6.3.1 条件查询语法

  • 语法
    1. SELECT 字段名 FROM 表名 WHERE 条件;

6.3.2 运算符

运算符 说明
> 、< 、<= 、>= 、= 、<> <>在 SQL 中表示不等于,在 mysql 中也可以使用!= 没有==
BETWEEN…AND 在一个范围之内
IN( 集合) 集合表示多个值,使用逗号分隔
IS NULL 查询某一列为 NULL 的值,注:不能写=NULL
LIKE 模糊查询 占位符: _:单个任意字符 %:多个任意字符
AND 或 && 与,SQL 中建议使用前者,后者并不通用。
OR 或 ||
NOT 或 !

6.3.3 条件查询

  • 查询年龄大于20岁
    1. SELECT * FROM student WHERE age > 20;
    2. SELECT * FROM student WHERE age >= 20;
  • 查询年龄等于20岁
    1. SELECT * FROM student WHERE age = 20;
  • 查询年龄不等于20岁
    1. SELECT * FROM student WHERE age != 20;
    2. SELECT * FROM student WHERE age <> 20;
  • 查询年龄大于等于20 小于等于30
    1. SELECT * FROM student WHERE age >= 20 && age <=30;
    2. SELECT * FROM student WHERE age >= 20 AND age <=30;
    3. SELECT * FROM student WHERE age BETWEEN 20 AND 30;
  • 查询年龄22岁,18岁,25岁的信息
    1. SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
    2. SELECT * FROM student WHERE age IN (22,18,25);
  • 查询英语成绩为null
    1. SELECT * FROM student WHERE english = NULL; -- 不对的。null值不能使用 = (!=) 判断
    2. SELECT * FROM student WHERE english IS NULL;-- 正确写法
  • 查询英语成绩不为null
    1. SELECT * FROM student WHERE english IS NOT NULL;
  • 查询姓马的有哪些
    1. SELECT * FROM student WHERE NAME LIKE '马%';
  • 查询姓名第二个字是化的人
    1. SELECT * FROM student WHERE NAME LIKE "_化%";
  • 查询姓名是3个字的人
    1. SELECT * FROM student WHERE NAME LIKE '___';
  • 查询姓名中包含德的人
    1. SELECT * FROM student WHERE NAME LIKE '%德%';