什么是SQL
SQL是Structured Query Language(结构化查询语言)的缩写。SQL是一种十分重要的标准数据库语言,SQL包括数据查询、数据操纵、定义、控制和管理功能。
SQL的特点
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*说明:以下语句中"[]"内为可选项,{|}表示二选一,使用 IF EXISTS 从句可以从不显示错误信息
数据查询
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
例:查询所有年龄超过20岁的学生姓名及其年龄SELECT SNAME,SAGEFROM studentWHERE SAGE>20;例:查询考试成绩有不及格的学生的学号SELECT DISTINCT SNOFROM scWHERE GRADE<60;多条件查询例:查询选修了1号或2号课程并且成绩大于等于90分的学生的学号,课程和成绩SELECT SNO ,CNO,GRADEFROM scWHERE (CNO='1' OR CNO='2') AND GRADE >=90;逻辑运算符的优先等级由高到低为:NOT、AND、OR,可以使用括号改变优先级。确定范围例:SELECT SNAME,SDEPT,SAGEFROM studentWHERE SAGE BETWEEN 18 AND 20;SELECT SNAME,SDEPT,SAGEFROM studentWHERE SAGE >=18 AND SAGE <=20;确定集合例:查询选修1号或2号课程的学生的学号、课程号和成绩SELECT SNO , CNO , GRADEFROM scWHERE CNO IN ('1','2');或者SELECT SNO , CNO , GRADEFROM scWHERE CNO='1' OR CNO='2';
例:查找名字以b开头的内容SELECT * from pet WHERE name LIKE 'b%';例:查找名字以fy结尾的内容SELECT * from pet WHERE name LIKE '%fy';例:查找名字包含w的内容SELECT * FROM pet WHERE name LIKE '%w%';例:查找名字长度为5个字符的内容,使用_模式实现SELECT * FROM pet WHERE name LIKE '_____';MySQL提供的另一种模式匹配使用扩展的正则表达式。在测试此类型的模式是否匹配时,请使用 REGEXP_LIKE()函数(或的 REGEXP或 RLIKE 运算符,它们是的同义词 REGEXP_LIKE())。正则表达式例:查找名字以b开头的内容SELECT * FROM pet WHERE REGEXP_LIKE(name,'^b');例:区分大小写排序规则SELECT * FROM pet WHERE REGEXP_LIKE(name, '^b' COLLATE utf8mb4_0900_as_cs);SELECT * FROM pet WHERE REGEXP_LIKE(name, BINARY '^b');SELECT * FROM pet WHERE REGEXP_LIKE(name, '^b', 'c');例:查找名字以fy结尾的内容,需以$结尾SELECT * FROM pet WHERE REGEXP_like(name,'fy$');例:查找名字中包含w的内容SELECT * from pet WHERE REGEXP_like(name,'w');例:查找名字长度为5个字符的内容SELECT * FROM pet WHERE REGEXP_like(name,'^.....$');或SELECT * FROM pet WHERE REGEXP_like(name,'^.{5}$');
空值查询*空值不同于零和空格,它不占任何存储空间例:查询分数为空的学号和课程号SELECT SNO,CNOFROM scWHERE GEADE IS NULL;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
例:查询学生202016123选修的课程的总分和平均分SELECT SUM(GRADE),AVG(GRADE)FROM scWHERE SNO='202016123';例:查询选修2号课程的最高分和最低分SELECT MAX(GRADE),MIN(GRADE)FROM scWHERE CNO='2';例:查询学生总人数SELECT COUNT(SNO)FROM student;SELECT COUNT(*)FROM student;例:查询选修了课程的学生人数SELECT COUNT(DISTINCT SNO)FROM SC;
例:查询每个课程号及其限选课人数SELECT CNO,COUNT(SNO)FROM SCGROUP BY CNO;查询至少有2人选修的课程号及其选课人数SELECT CNO ,COUNT(SNO)FROM scGROUP BY CNOHAVING COUNT(SNO)>=2;
数据定义
例:建立数据库“sales”,字符集为utf8,校对规则utf8_general_ciCREATE DATABASE salesDEFAULT CHARACTER SET utf8COLLATE utf8_general_ci;
例:指定使用sales数据库操作USE sales;
例:修改数据库sales,字符集为latin1,校对规则为latin1_swedish_ciALTER DATABASE salesDEFAULT CHARACTER SET latin1COLLATE latin1_swedish_ci;
例:删除数据库salesDROP DATABASE sales;或者DROP DATABASE sales IF EXISTS sales;
创建表
例:创建student表,设置SNO为主键(码)CREATE TABLE student (SNO CHAR(10) PRIMARY KEY,SNAME VARCHAR(20) NOT NULL,SSEX CHAR(2) DEFAULT '男',SAGE SMALLINT,SDEPT CHAR(20));例:创建分数表course表,设置CNO为主键,CNAME为唯一值,并设置参照完整性约束CREATE TABLE course (CNO CHAR(4) PRIMARY KEY,CNAME VARCHAR(20) UNIQUE,CPNO CHAR(4),CCREDIT SMALLINT,FOREIGN KEY (CPNO) REFERENCES course(CNO));创建sc表,设置SNO和CNO为主键即表约束条件CREATE TABLE sc(SNO CHAR(9),CNO CHAR(4),GRADE SMALLINT,PRIMARY KEY(SNO,CNO),FOREIGN KEY(SNO)REFERENCES student(SNO),);
例:查看sales数据库中product表结构USE salesDESCRIBE product;
例:查看product表的创建语句SE salesSHOW CREATE TABLE product;
修改表结构
增加新列或新的列约束条件
例:student表增加入学时间SDATE列,数据类型为日期型ALTER TABLE student ADD SDATE DATETIME;例:sc表增加一个GRADE列,取值范围为0-100的约束条件ALTER TABLE SC ADD CONSTRAINT grade_CHKCHECK(grade BETWEEN 0 AND 100);例:在学生表student的入学日期后面添加一个出生日期birthday字段ALTER TABLE studentADD birthday DATE AFTER SDATE;
例:将student表的SNO列改为9个字符长度ALTER TABLE student ALTER COLUMN sno CHAR(9);例:将学生表student的入学日期字段SDATE的数据类型改为TIMESTAMPALTER TABLE studentMODIFY SDATE TIMESTAMP;
例:删除sc表的GEADE_CHK约束ALTER TABLE sc DROP CONSTRAINT GEADE_CHK;
删除表中某个字段
例:删除学生表student的入学日期RXDATE字段ALTER TABLE studentDROP RXDATE;
删除表
例:删除sc表DROP TABLE sc;或DROP TABLE IF EXISTS sc;
插入表数据
INSERT [INTO]<表名>
[(字段名1,字段名2,...,字段名n)]
VALUES (值1,值2,...,值n)
例:向销售员表seller中添加一条记录INSERT INTO seller VALUES (8,'A08','黎明','男','1990-1-1','2020-9-20','颐和花园'
修改多个元组的值UPDATE student SET SAGE=SAGE+1;带子查询的修改语句例:将计算机科学系(cs)全体学生的成绩置零UPDATE scSET GEADE=0WHERE 'cs'=(SELECT SDEPT FROM student WHERE student.SNO=sc.SNO);例:将某同学的学号更改为202016123,但学号为主键,主键的数据不能修改,因此把该条记录删除后再进行插入DELETE FROM studentWHERE SNAME=黎明;INSERT INTO studentVALUES("202016123","黎明","男","17","CS");例:将学生表student的入学日期SDATE字段更名为RXDATE、数据类型为DATETIMEALTER TABLE studentCHANGE SDATE RXDATE DATETIME;
删除表数据
DELETE FROM <表名>
[WHERE 条件]
例:删除seller表中某条记录DELETE FROMsellerWHERE SALESNO='A08';例:删除表中所有数据(清空表)DELETE FROM seller;
MySQL使用LOAD DATA语句加载本地文件失败——如何启用加载本地文件功能

