1、数据库操作
1.创建数据库
--CREATE DATABASE 数据库名称;
CREATE DATABASE test;
2.查看数据库
1)查看已经存在的数据库
SHOW DATABASES;
2)查看创建好的数据库test
--SHOW CREATE DATABASE 数据库名称;
SHOW CREATE DATABASE test;
3.修改数据库
--ALTER DATABASE test DEFAULT CHARACTER SET 编码方式 COLLATE 编码方式_bin
ALTER DATABASE test DEFAULT CHARACTER SET UTF8 COLLATE UTF8_bin
4.删除数据库
--DROP DATABASE 数据库名称;
DROP DATABASE test;
2、数据类型
1.数值类型
2.日期和时间类型
3、数据表的基本操作
1.创建数据表
USE test;
CREATE TABLE teacher
(
id INT(5),
name VARCHAR(10),
email VARCHAR(50)
);
--使用数据库
--CREATE TABLE 数据库名称
--(
-- id INT(5),
-- name VARCHAR(10),
-- email VARCHAR(50)
--);
2.查看数据表
1)使用SHOW CREATE TABLE语句查看数据表
SHOW CREATE TABLE teacher;
--SHOW CREATE TABLE 数据表名称;
2)使用DESCRIBE语句查看数据表
--DESCRIBE 表名
--DESC 表名
DESCRIBE teacher;
3.修改数据表
1)修改表名
--ALTER TABLE 旧表名 RENAME [TO] 新表明
ALTER TABLE teacher RENAME t_teacher;
2)修改字段名和数据类型
--ALTER TABLE t_teacher 旧字段名 新字段名 新数据类型;
ALTER TABLE t_teacher CHANGE id workid INT(5);
3)修改字段的数据类型
--ALTER TABLE 表名 MODIFY 字段名 新数据类型;
ALTER TABLE t_teacher MODIFY workid TINYINF;
4)添加字段
--ALTER TABLE 表名 ADD 新字段名 数据类型[约束条件] [FIRST|AFTER 已经存在的字段名];
ALTER TABLE t_teacher ADD age INT(5);
5)删除字段
--ALTER TABLE 表名 DROP 字段名;
ALTER TABLE t_teacher DROP email;
4.删除数据表
--DROP TABLE 表名;
DROP TABLE t_teacher;
4、数据库表的约束
4.1 主键约束
单字段主键
1)创建表时指定主键
CREATE TABLE company
(
--字段名 数据类型 PRIMARY KEY;
company_id INT(11) PRIMARY KEY,
company_name VARCAHR(50)
);
2)添加主键约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 PRIMARY KEY;
ALTER TABLE t_teacher MODIFY id INT(5) PRIMARY KEY;
3)删除主键约束
--ALTER TABLE 表名 DROP PRIMARY KEY
ALTER TABLE t_teacher DROP PRIMARY KEY;
复合主键
1)创建表时指定复合主键
--PRIMARY KEY(字段名1, 字段名2,···,字段名3);
CREATE TABLE sales
(
product_id INT(11),
region_code VARCHAR(10),
quantity INT(11),
price FLOAT,
PRIMARY KEY(product_id,region_code)
);
2)为已存在的表添加复合主键
--ALTER TABLE 表名 ADD PRIMARY KEY(字段名1,字段名2,字段名3);
DPOR TABLE sales;
CREATE TABLE sales
(
product_id INT(11),
region_code VARCHAR(10),
quantity INT(11),
price FLOAT
);
ALTER TABLE sales ADD PRIMARY KEY(product_id,region_code);
3)删除复合主键约束
ALTER TABLE 表名 DROP PRIMARY KEY;
4.2 外键约束
FOREIGN KEY
CONSTRAINT 外键名 FOREIGN KEY(从表的外键字段名) REFERENCES 主表名(主表的主键字段名);
CONSTRAINT fk_emp_dept FOREIGN KEY(dept_id) REFERENCES dept(id);
4.3 唯一约束
UNIQUE;
4.4 默认约束
--1.创建表时添加默认约束
字段名 数据类型 DEFAULT 默认值;
company_tel VARCHAR(20) DEFAULT '0371-';
--2.为已存在的表添加默认约束
--ALTER TABLE 表名 MODIFY 字段名 新数据类型 DEFAULT 默认值;
ALTER TABLE company MODIFY company_tel VARCHAR(20) DEFAULT '0371-'
--3.删除默认约束
ALTER TABLE 表名 MODIFY 字段名 数据类型;
ALTER TABLE company MODIFY company_tel VARCHAR(20);
4.5 设置表的字段自动增加
AUTO_INCREMENT
--1.创建表时指定字段值自动增加
--字段名 数据类型 PRIMARY KEY AUTO_INCREMENT
--2.为已存在的表设置字段值自动增加
--ALTER TABLE 表名 MODIFY 字段名 新数据类型 AUTO_INCREMENT;
ALTER TABLE company MODIFY company_id INT(11) AUTO_INCREMENT;
--3.删除字段值的自动增加
--ALTER TABLE 表名 MODIFY 字段名 数据类型;
ALTER TABLE company MODIFY company_id INT(11);
5、数据表记录的更新操作
1. 插入
--插入单条数据
INSERT INTO studentinfo(sno,sname,sgender,sbirth) VALUES ('10101001','张三丰','男','2000-10-20');
--插入多条数据
INSERT INTO studentinfo
VALUES ('10102001','王二','男','1999-10-10'),
('10102002','李三','女','1999-12-12');
2. 修改
--将sclass字段下的值全部改为了就三家
UPDATE studentinfo SET sclass='计算机';
--将张三的改为计算机
UPDATE studentinfo SET sclass='计算机' WHERE sname='张三'
3. 删除
--只删除张三
DELETE FROM studentinfo where sname='张三';
--删除表全部信息
DELETE FROM studentinfo
4. 使用TRUNCATE清空数据
TRUECATE TABLE studentinfo;
--执行效果与DELETE一样
5. 查询
5.1 SELECT
--1.查询数据表中所有信息
SELECT * FROM studentinfo
--2.根据字段查询数据表字段信息
SELECT sno,snamme,sgender,sbirth FROM studentinfo
--3.设置别名查找信息
SELECT sno 学生学号,sname AS 学生姓名 FROM studentinfo;
5.2 WHERE 设置查询条件
--1. 设置sclass='软件工程101'查询条件
SELECT * FROM studentinfo WHERE sclass='软件工程101';
--2. 设置范围查询条件
SELECT * FROM studentinfo WHERE sbirth BETWEEN '2000-1-1' AND '2000-12-31';
--3.列表运算符的使用
SELECT * FROM studentinfo WHERE sno IN('101010001','10102001','11101001');
--4.模式匹配运算符
SELECT * FROM studentinfo WHERE sname LIKE '张%';
--5.空值判断运算符
SELECT * FROM studentinfo WHERE score IS NULL;
--6.逻辑运算符AND,OR,NOT
SELECT * FROM studentinfo WHERE sname LIKE '王%' AND sclass='电子商务';
SELECT * FROM studentinfo WHERE sname LIKE '王%' OR sclass='电子商务'
--查询不是1992年的
SELECT *FROM studentinfo WHERE NOT(YEAR(sbirth)=1992);
5.3 ORDER BY 排序
ASC是升序(默认),DESC是降序
SELECT *
FROM elective
WHERE cno='coo1'
ORDER BY score DESC;
5.4 LIMIT限制
--1.输出前三条学生记录的信息,显示前3行
SELECT *
FROM studentinfo
LIMIT 3;
--2.显示第5行的一条数据
SELECT *
FROM studentinfo
LIMIT 4,1
5.5 统计查询
5.5.1 集合查询
--1.查询学生总人数
SELECT COUNT(*) As 学生总人数
FROM studentinfo
--
SELECT COUNT(*) AS 学生人数,
SUM(score) AS 总成绩,
AVG(score) 平均分,
MIN(score), MAX(score)
FROM elective
WHERE cno='c003'
5.5.2 使用GROUP BY子句
--1.查询studentinfo表,分别统计男女生人数
SELECT sgender,COUNT(*) AS 人数
FROM studentinfo
GROUP BY sgender;
--2.查询elective表,统计并输出每个学生所选课程数目及平均分
SELECT sno, COUNT(cno) AS 选修课程数目,AVG(score) AS 平均分
FROM elective
GROUP BY sno;
--3.查询elective表,统计并输出每门课程所选学生人数及最高分
SELECT cno COUNT(sno) AS 所选人学生人数, MAX(score) AS 最高分
FROM elective
GROUP BY cno;
--4.查询elective表中每门课成绩都在70~90分的学生的学号
SELECT sno AS 每门课成绩都在70~90分的学生的学号
FROM elective
GROUP BY sno
HAVING MIN(score)>=70 AND MAX(score)<=90;
--5.查询至少选修了三门课程的学生的学号
SELECT sno ,COUNT(*) 选修课程数
FROM elective
GROUP BY sno
HAVING COUNT(*)>3;
5.6 多表查询
5.6.1 交叉连接
--1.对course表和teacher表进行交叉连接,观察交叉连接后的结果集
SELECT *
FROM cource CROSS JOIN teacher;
5.6.2 内连接
SELECT s.sno, sname, cno score
FROM studentinfo AS s JOIN elective AS e ON s.sno = e.sno
WHERE score<60;
SELECT s.sno, sname, cno, socre
FROM studentinfo AS s, elective AS e
WHERE s.sno = e.sno AND score<60;
5.6.3 外连接
SELECT *
FROM teacher AS t LEFT JOIN cource AS c ON t.tno=c.ctno;