大数跨境
0
0

吐血整理数据分析常用的SQL语句——附带简单例子

吐血整理数据分析常用的SQL语句——附带简单例子 数据分析之渔
2020-09-24
1

什么是SQL

SQL是Structured Query Language(结构化查询语言)的缩写。SQL是一种十分重要的标准数据库语言,SQL包括数据查询、数据操纵、定义、控制和管理功能。


SQL的特点

1、综合统一
2、高度非过程化
3、面向集合的操作方式
4、以同一种语法结构提供多种使用方式
5、语言简洁,易学易用,
SQL语言的动词整理如下表:
SQL功能
动词
数据查询
SELECT
数据定义
CREATE , DROP , ALTER
数据操纵
INSERT , UPDATE , DELETE
数据控制
GRANT , REVOKE


*说明:以下语句中"[]"内为可选项,{|}表示二选一,使用 IF EXISTS 从句可以从不显示错误信息 


数据查询

一般查询语法
SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]...
FROM <表名或视图名> [,<表名或视图名>]...
[WHERE <条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]]
[ORDER BY<列名2>[ASC|DESC]];


通过WHERE子句实现
查询条件
运算符
比较
=,>,<,<=,>=,!=
多重条件
AND , OR , NOT
确定范围
BETWEEN AND , NOT BETWEEN AND
确定集合
IN , NOT IN
字符匹配
LIKE , NOT LIKE
空值
IS NULL , IS NOT NULL
例:查询所有年龄超过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,SAGE FROM student WHERE SAGE BETWEEN 18 AND 20;
SELECT SNAME,SDEPT,SAGE FROM student WHERE SAGE >=18 AND SAGE <=20;
确定集合例:查询选修1号或2号课程的学生的学号、课程号和成绩SELECT SNO , CNO , GRADE FROM sc WHERE CNO IN ('1','2');或者SELECT SNO , CNO , GRADE FROM sc WHERE CNO='1' OR CNO='2';
字符匹配模糊查询
<列名>[NOT]LIKE'<匹配字符串>'[ESCAPE'<换码字符>']
例:查找名字以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;
常用的聚集函数
函数名称
功能
COUNT([DISTINCT | ALL]*)
元组计数
COUNT([DISTINCT | ALL]<列名>)
按列值元组计数
SUM([DISTINCT | ALL]<列>)
按列计算值的综合
AVG([DISTINCT | ALL]<列>)
按列计算平均值
MAX([DISTINCT | ALL]<列>)
求一列中的最大值
MIN([DISTINCT | ALL]<列>)
求一列中的最小值
例:查询学生202016123选修的课程的总分和平均分SELECT SUM(GRADE),AVG(GRADE)FROM sc WHERE 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;
使用 GROUP BY 子句对查询结果分组
分组方法:按指定的一列或多列值分组,值相等的为一组
SELECT 子句的目标列表达式列表中只能出现分组属性和聚集函数
GROUP BY 子句细化了聚集函数的作用对象:
 ·未对查询结果分组,聚集函数将作用于整个查询结果;
 ·对查询结果分组后,聚集函数将分别作用于每个组。
例:查询每个课程号及其限选课人数SELECT CNO,COUNT(SNO)FROM SC GROUP BY CNO;
查询至少有2人选修的课程号及其选课人数SELECT CNO ,COUNT(SNO)FROM scGROUP BY CNOHAVING COUNT(SNO)>=2;
HAVINGWHERE 子句的区别:作用对象不同
WHERE 作用于基本表或视图,从中选择满足条件的元组
HAVING  作用于分组,从中选择满足条件的分组


数据定义

创建数据库
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS]数据库名
[[DEFAULTCHARACTER SET 字符集名| [DEFAULTCOLLATE 校对规则名]
例:建立数据库“sales”,字符集为utf8,校对规则utf8_general_ciCREATE DATABASE salesDEFAULT CHARACTER SET utf8COLLATE utf8_general_ci;


查看已创建的数据库
SHOW DATABASE;
打开指定的数据库(或者跳转至指定的数据)
USE 数据库名;
例:指定使用sales数据库操作USE sales;


修改数据库
使用ALTER DATABASE 修改数据库
ALTER {DATABASE SCHEMA}数据库名
[[DEFAULTCHARACTER SET 字符集名 |[DEFATCOLLATE 校对规则名];
例:修改数据库sales,字符集为latin1,校对规则为latin1_swedish_ciALTER DATABASE salesDEFAULT CHARACTER SET latin1COLLATE latin1_swedish_ci;

删除数据库
DROP DATABASE [IF EXISTS]数据库名;
例:删除数据库salesDROP DATABASE sales;或者DROP DATABASE sales IF EXISTS sales;

创建表

CREATE TABLE <表名> (
<列名> <数据类型> [<列约束条件>]
[,<列名> <数据类型> [<列约束条件>]]...
[,<表约束条件>]);
说明:·<列约束条件>:涉及相应属性列的约束条件;
         ·<表约束条件>:涉及一个或多个属性列的约束条件。
例:创建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),);


查看数据表的结构
使用 " DESCRIBE " 或 "DESC"语句查看表结构
DESCRIBE | DESC 表名;
例:查看sales数据库中product表结构USE salesDESCRIBE product;
查看数据表的创建语句
SHOW CREATE TABLE 表名;
例:查看product表的创建语句SE salesSHOW CREATE TABLE product;

修改表结构

ALTER TABLE 表名
ADD 字段名 数据类型 [属性][索引][FIRST|AFTER 字段名]|
MODIFY 字段名 数据类型 [属性][索引]|
CHANGE 字段名 新字段名 数据类型 [属性][索引]|
DROP 字段名|
AUTO_INCREMENT=n|
RENAME AS 新表名;


增加新列或新的列约束条件

ALTER TABLE <表名> ADD <列定义>|<列约束定义>;
例: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 student ADD birthday DATE AFTER SDATE;
修改列的数据类型
ALTER TABLE <表名> ALTER COLUMN <列名><新数据类型>;
例:将student表的SNO列改为9个字符长度ALTER TABLE student ALTER COLUMN sno CHAR(9);
例:将学生表student的入学日期字段SDATE的数据类型改为TIMESTAMPALTER TABLE student MODIFY SDATE TIMESTAMP;
删除列的约束条件
ALTER TABLE <表名> DROP CONSTRAINT <约束名>;
例:删除sc表的GEADE_CHK约束ALTER TABLE sc DROP CONSTRAINT GEADE_CHK;

删除表中某个字段


例:删除学生表student的入学日期RXDATE字段ALTER TABLE student DROP RXDATE;

删除表

DROP TABLE <表名> [RESTRICT|CASCADE];
DROP TABLE [IF EXISTS] <表名>;
说明:
RESTRICT:删除该表是有限制条件的,该表不能被其它表的约束所引用,不能有视图、触发器、存储过程、函数等。
如果有则改表不能被删除,缺省则默认RESTRICT
CASCADE :该表的删除没有限制,改表一旦删除,表上的数据、索引和视图都删除,删除表时,系统从数据字典中
删去有关该表及其索引的描述。
例:删除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 <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]...
[WHERE<条件>];
修改多个元组的值UPDATE student SET SAGE=SAGE+1;
带子查询的修改语句例:将计算机科学系(cs)全体学生的成绩置零UPDATE scSET GEADE=0WHERE 'cs'=(SELECT SDEPT FROM student WHERE student.SNO=sc.SNO);
例:将某同学的学号更改为202016123,但学号为主键,主键的数据不能修改,因此把该条记录删除后再进行插入DELETE FROM student WHERE SNAME=黎明;
INSERT INTO student VALUES("202016123","黎明","男","17","CS");
例:将学生表student的入学日期SDATE字段更名为RXDATE、数据类型为DATETIMEALTER TABLE student CHANGE SDATE RXDATE DATETIME;

删除表数据

DELETE FROM <表名>

[WHERE 条件]

例:删除seller表中某条记录DELETE FROM seller WHERE SALESNO='A08';
例:删除表中所有数据(清空表)DELETE FROM seller;



MySQL使用LOAD DATA语句加载本地文件失败——如何启用加载本地文件功能


如何通过python读取sqlite数据文件

【声明】内容源于网络
0
0
数据分析之渔
大数据、商业数据分析、AI科技等资讯分享,联系作者请注明合作项
内容 69
粉丝 0
数据分析之渔 大数据、商业数据分析、AI科技等资讯分享,联系作者请注明合作项
总阅读3
粉丝0
内容69