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 '%德%';