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 编码方式_binALTER 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 KEYALTER 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 studentinfoVALUES ('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,NOTSELECT * 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 electiveWHERE cno='coo1'ORDER BY score DESC;
5.4 LIMIT限制
--1.输出前三条学生记录的信息,显示前3行SELECT *FROM studentinfoLIMIT 3;--2.显示第5行的一条数据SELECT *FROM studentinfoLIMIT 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 electiveWHERE cno='c003'
5.5.2 使用GROUP BY子句
--1.查询studentinfo表,分别统计男女生人数SELECT sgender,COUNT(*) AS 人数FROM studentinfoGROUP BY sgender;--2.查询elective表,统计并输出每个学生所选课程数目及平均分SELECT sno, COUNT(cno) AS 选修课程数目,AVG(score) AS 平均分FROM electiveGROUP BY sno;--3.查询elective表,统计并输出每门课程所选学生人数及最高分SELECT cno COUNT(sno) AS 所选人学生人数, MAX(score) AS 最高分FROM electiveGROUP BY cno;--4.查询elective表中每门课成绩都在70~90分的学生的学号SELECT sno AS 每门课成绩都在70~90分的学生的学号FROM electiveGROUP BY snoHAVING MIN(score)>=70 AND MAX(score)<=90;--5.查询至少选修了三门课程的学生的学号SELECT sno ,COUNT(*) 选修课程数FROM electiveGROUP BY snoHAVING COUNT(*)>3;
5.6 多表查询
5.6.1 交叉连接
--1.对course表和teacher表进行交叉连接,观察交叉连接后的结果集SELECT *FROM cource CROSS JOIN teacher;
5.6.2 内连接
SELECT s.sno, sname, cno scoreFROM studentinfo AS s JOIN elective AS e ON s.sno = e.snoWHERE score<60;SELECT s.sno, sname, cno, socreFROM studentinfo AS s, elective AS eWHERE 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;
