标题: 数据宝典 [打印本页] 作者: 退换货的通话 时间: 2019-7-14 14:51 标题: 数据宝典 -- 创建数据库
CREATE DATABASE cad;
-- 查询数据库
SHOW DATABASES;
-- 创建数据库,判断不存在,再创建
CREATE DATABASE IF NOT EXISTS cad2;
-- 查询某个数据库的字符集:查询某个数据库的创建语句
SHOW CREATE DATABASE cad2
-- 创建数据库,并指定字符集
CREATE DATABASE cad3 CHARACTER SET gbk;
-- 创建cad4数据库,判断是否存在,并制定字符集为utf8
CREATE DATABASE IF NOT EXISTS cad4 CHARACTER SET utf8;
-- 修改数据库的字符集
ALTER DATABASE cad3 CHARACTER SET utf8;
-- 删除数据库
DROP DATABASE cad3;
-- 判断数据库存在,存在再删除
DROP DATABASE IF EXISTS cad2;
DROP DATABASE IF EXISTS cad4;
-- 查询当前正在使用的数据库名称
SELECT DATABASE();
-- 使用数据库
USE cad;
-- 创建学生成绩表
CREATE TABLE student_score(
id INT,
NAME VARCHAR(10),
chinese DOUBLE(4,1),
math DOUBLE(4,1),
english DOUBLE(4,1)
);
/*
查询某个数据库中所有的表名称: show tables;
查询表结构: desc 表名;
1. 修改表名
alter table 表名 rename to 新的表名;
2. 修改表的字符集
alter table 表名 character set 字符集名称;
3. 添加一列
alter table 表名 add 列名 数据类型;
4. 修改列名称 类型
alter table 表名 change 列名 新列名 新数据类型;--->change可以改名,改类型
alter table 表名 modify 列名 新数据类型;---> modify只能修改类型
5. 删除列
alter table 表名 drop 列名;
(Delete):删除
* drop table 表名;
* drop table if exists 表名 ;
*/
-- 修改表名
ALTER TABLE student_score RENAME TO student;
-- 修改name的长度为15
ALTER TABLE student MODIFY NAME VARCHAR(15);
-- 将name改为sname,长度为10
ALTER TABLE student CHANGE NAME sname VARCHAR(10);
-- 添加一列"所属班级","aaa"
ALTER TABLE student ADD class VARCHAR(20);
ALTER TABLE student ADD aaa VARCHAR(20);
-- 删除aaa这一列
ALTER TABLE student DROP aaa;
/*
添加数据:
语法:
* insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
注意:
1. 列名和值要一一对应。
2. 如果表名后,不定义列名,则默认给所有列添加值
insert into 表名 values(值1,值2,...值n);
3. 除了数字类型,其他类型需要使用引号(单双都可以)引起来
*/
* 注意:
1. 如果不加任何条件,则会将表中所有记录全部修改。
*/
-- 删除数据
DELETE FROM student WHERE id=3;
-- 修改数据
UPDATE student SET class="无法地带" WHERE id = 2;
UPDATE student SET class="泰波尔斯" WHERE id = 1 || id = 4;
-- 查询表中的记录 select * from 表名;
SELECT * FROM student;
/*-------------DQL:查询表中记录-------------*/
/** select * from 表名;
1. 语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
-- 查询math大于80分
SELECT * FROM student WHERE math > 80;
SELECT * FROM student WHERE math >= 80;
-- 查询math等于80分
SELECT * FROM student WHERE math = 80;
-- 查询math不等于80分
SELECT * FROM student WHERE math != 80;
SELECT * FROM student WHERE math <> 80;
-- 查询chinese大于等于95 小于等于75
SELECT * FROM student WHERE chinese >= 95 && age <=75;
SELECT * FROM student WHERE chinese >= 95 AND age <= 75;
SELECT * FROM student WHERE chinese BETWEEN 95 AND 75;
-- 查询chinese99分,85分,86分的信息
SELECT * FROM student WHERE chinese = 99 OR chinese = 85 OR chinese = 86;
SELECT * FROM student WHERE chinese IN (99,85,86);
-- 查询英语成绩为null
SELECT * FROM student WHERE english = NULL; -- 不对的。null值不能使用 = (!=) 判断
SELECT * FROM student WHERE english IS NULL;
-- 查询英语成绩不为null
SELECT * FROM student WHERE english IS NOT NULL;
-- 查询姓马的有哪些? like
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 '%德%';
/*
排序查询
* 语法:order by 子句
* order by 排序字段1 排序方式1 , 排序字段2 排序方式2...
* 排序方式:
* ASC:升序,默认的。
* DESC:降序。
* 注意:
* 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
*/
-- math按升序,english降序排序
SELECT * FROM student ORDER BY math ASC,english DESC;
-- 显示name的个数
SELECT COUNT(NAME) FROM student;
-- 计算math成绩最大值
SELECT MAX(math) FROM student;
-- 计算math成绩最小值
SELECT MIN(math) FROM student;
-- 计算math,english的和
SELECT SUM(math),SUM(IFNULL(english,0)) AS 英语总分 FROM student;
-- 计算math大于80分的平均分
SELECT AVG(math) FROM student WHERE math > 80;
/*
分组查询:
1. 语法:group by 分组字段;
2. 注意:
1. 分组之后查询的字段:分组字段、聚合函数
2. where 和 having 的区别?
1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。
*/
-- 按照性年级分组。分别查询学生的数学平均分
SELECT class , AVG(math) FROM student GROUP BY class;
-- 按照性年级分组。分别查询学生的数学平均分,人数
SELECT class , AVG(math),COUNT(id) FROM student GROUP BY class;
-- 按照性年级分组。分别查询学生的数学平均分,人数 要求:分数低于80分的人,不参与分组
SELECT class , AVG(math),COUNT(id) FROM student WHERE math > 80 GROUP BY class;
-- 按照性年级分组。分别查询学生的数学平均分,人数 要求:分数低于80分的人,不参与分组,分组之后。人数要大于2个人
SELECT class , AVG(math),COUNT(id) FROM student WHERE math > 80 GROUP BY class HAVING COUNT(id) > 2;
SELECT class , AVG(math),COUNT(id) 人数 FROM student WHERE math > 80 GROUP BY class HAVING 人数 > 2;
/*
非空约束:not null,某一列的值不能为null
1. 创建表时添加约束
CREATE TABLE stu(
字段名 字段类型,
字段名 字段类型 NOT NULL -- name为非空
);
2. 创建表完后,添加非空约束
ALTER TABLE 表名 MODIFY 字段名 字段类型 NOT NULL;
3. 删除name的非空约束
ALTER TABLE 表名 MODIFY 字段名 字段类型;
*/
-- 修改表将sname和class改为非空约束
ALTER TABLE student MODIFY sname VARCHAR(10) NOT NULL;
ALTER TABLE student MODIFY class VARCHAR(10) NOT NULL;
-- 修改表将class非空约束去掉
ALTER TABLE student MODIFY class VARCHAR(10);
/*
唯一约束:unique,某一列的值不能重复
1. 注意:
* 唯一约束可以有NULL值,但是只能有一条记录为null
2. 在创建表时,添加唯一约束
CREATE TABLE stu(
字段名 字段类型,
字段名 字段类型 UNIQUE
);
3. 删除唯一约束
ALTER TABLE 表名 DROP INDEX 字段名;
4. 在表创建完后,添加唯一约束
ALTER TABLE 表名 MODIFY 字段名 字段类型 UNIQUE;
*/
-- 修改id,添加唯一约束
ALTER TABLE student MODIFY id INT UNIQUE;
-- 移除id唯一约束
ALTER TABLE student DROP INDEX id;
INSERT INTO student2 VALUES(NULL,'杜傲德',1);
INSERT INTO student2 VALUES(NULL,'贾倩稳',1);
INSERT INTO student2 VALUES(NULL,'刘子豪',2);
INSERT INTO student2 VALUES(NULL,'赵放',2);
-- 删除外键约束
ALTER TABLE student2 DROP FOREIGN KEY stu_class_fk;
-- 添加外键约束
ALTER TABLE student2 ADD FOREIGN KEY(cid) REFERENCES classroom(cid);
SELECT * FROM classroom;
SELECT * FROM student2;