4.DDL:操作数据库、表
4.1 操作数据库(CRUD)
4.1.1 创建数据库
- 创建数据库【掌握】 - create database 数据库名称;
 
- 创建数据库,判断不存在,再创建【掌握】 - create database if not exists 数据库名称;
 
- 创建数据库,并指定字符集【了解】 - create database 数据库名称 character set 字符集名;
 
- 练习: 创建db4数据库,判断是否存在,并指定字符集为gbk【了解】 - create database if not exists db4 character set gbk;
 
4.1.2 查询数据库
- 查询所有数据库的名称【掌握】 - show databases;
 
- 查询某个数据库的字符集:查询某个数据库的创建语句 - show create database 数据库名称;
 
4.1.3 修改数据库(慎重操作)
- 修改数据库的字符集 - alter database 数据库名称 character set 字符集名称;
 
4.1.4 删除数据库(慎重操作)
- 删除数据库 - drop database 数据库名称;
 
- 判断数据库存在,存在再删除 - drop database if exists 数据库名称;
 
4.1.5 使用数据库
- 查询当前正在使用的数据库名称 - select database();
 
- 使用数据库 - use 数据库名称;
 
4.2 操作表(CRUD)
4.2.1 创建表(重点掌握)
- 创建表 - 语法 - create table 表名(
- 列名1 数据类型1 约束,
- 列名2 数据类型2 约束,
- ....
- 列名n 数据类型n 约束
- );
 
 注意事项:- 最后一列,不需要加逗号(,)
- 数据类型 
 | 数据类型 | 说明 | | —- | —- | | 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)表 - create table student(
- id int,
- name varchar(32),
- age int,
- score double(4,1),
- birthday date,
- insert_time timestamp
- );
 
 
- 复制表 - create table 表名 like 被复制的表名;
 
4.2.2 查询表
- 查询某个数据库中所有的表名称 - show tables;
 
- 查询表结构 - desc 表名;
 
4.2.3 修改表(慎重操作)
- 修改表名 - alter table 表名 rename to 新的表名;
 
- 修改表的字符集 - alter table 表名 character set utf8;
 
- 添加一列 - alter table 表名 add 列名 数据类型;
 
- 修改列名称以及数据类型 - alter table 表名 change 列名 新列别 新数据类型;
 
- 修改列类型 - alter table 表名 modify 列名 新数据类型;
 
- 删除列 - alter table 表名 drop 列名;
 
4.2.4 删除表(慎重操作)
- 删除表 - drop table 表名;
 
- 判断是否存在再删除表 - drop table if exists 表名;
 
5. DML:增删改表中数据(重点掌握)
5.1 添加数据
- 语法 - insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
 
- 注意事项 ```java
- 列名和值要一一对应。 表名(列名1,列名2,…列名n)写了几个字段,我们就给几个值,值的类型要跟字段类型保持一致
- 如果表名后,不定义列名,则默认给所有列添加值【了解】 insert into 表名 values(值1,值2,…值n);
- 除了数字类型,其他类型需要使用引号(单双都可以)引起来,推荐使用单引号
 【建议大家都使用单引号 ‘’ 不要使用双引号】
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 删除数据
- 语法 - delete from 表名 [where 条件]
 
- 注意事项 ```java
- 如果不加条件,则删除表中所有记录。
- 如果要删除所有记录- delete from 表名; — 不推荐使用。有多少条记录就会执行多少次删除操作
- TRUNCATE TABLE 表名; — 推荐使用,效率更高 先删除表,然后再创建一张一样的表 ```
 
5.3 修改数据
- 语法 - update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];
 
- 注意事项 - 如果不加任何条件,则会将表中所有记录全部修改。
 
6.DQL:查询表中的记录(重点掌握)
6.1 查询语法
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
- 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);
<a name="e8156c3c"></a>
#### 6.2.1 查询所有记录
```sql
select * from 表名;
6.2.2 查询指定字段
select 字段名1,字段名2... from 表名;
6.2.3 去重查询
- 关键字: **distinct**
例如: 去除地址重复的数据
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 在跟后面的数值进行相加
 
 
- 例子 - select name,math,english,math+ifnull(english,0) from stu;
 
6.2.5 起别名
- 语法 - as:as也可以省略
 
- 例子 - SELECT NAME as 姓名,math as 数学,english as 英语, math+IFNULL(english,0) AS 总成绩 FROM stu;
 
 或
6.3 条件查询
6.3.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岁 - SELECT * FROM student WHERE age > 20;
- 或
- SELECT * FROM student WHERE age >= 20;
 
- 查询年龄等于20岁 - SELECT * FROM student WHERE age = 20;
 
- 查询年龄不等于20岁 - SELECT * FROM student WHERE age != 20;
- SELECT * FROM student WHERE age <> 20;
 
- 查询年龄大于等于20 小于等于30 - SELECT * FROM student WHERE age >= 20 && age <=30;
- SELECT * FROM student WHERE age >= 20 AND age <=30;
- SELECT * FROM student WHERE age BETWEEN 20 AND 30;
 
- 查询年龄22岁,18岁,25岁的信息 - SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
- SELECT * FROM student WHERE age IN (22,18,25);
 
- 查询英语成绩为null - SELECT * FROM student WHERE english = NULL; -- 不对的。null值不能使用 = (!=) 判断
- SELECT * FROM student WHERE english IS NULL;-- 正确写法
 
- 查询英语成绩不为null - SELECT * FROM student WHERE english IS NOT NULL;
 
- 查询姓马的有哪些 - SELECT * FROM student WHERE NAME LIKE '马%';
 
- 查询姓名第二个字是化的人 - SELECT * FROM student WHERE NAME LIKE "_化%";
 
- 查询姓名是3个字的人 - SELECT * FROM student WHERE NAME LIKE '___';
 
- 查询姓名中包含德的人 - SELECT * FROM student WHERE NAME LIKE '%德%';
 
 
                         
                                

