Skip to content

quantitiveFund/SQL

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

83 Commits
 
 

Repository files navigation

SQL

image

结构化查询语言(Structured Query language),是一种用与数据库查询、存储、更新、管理的编程语言。

数据库本质

按照特定格式储存数据的文件系统

image

运行MySQL

验证MySQL是否安装正确,可以通过在命令提示符(在主界面运行cmd)中输入mysql -u root -p,正确安装下会链接到MySQL服务器,同时提示mysql>

定义数据对象语句

数据库和列表的创建

  • 创建数据库

CREATE DATABASE 数据库名;

  • CREATE DATABSE 王者荣耀;

1

  • 创建列表

CREATE TABLE 列表名(字段1,字段2...);

  • CREATE TABLE hero_1( hero_id INT, hero_name VARCHAR(20), profession VARCHAR(20) );
    • int 整数
    • double 双精度
    • varchar 字符串
    • data 时间

捕获123

数据库和列表的删除

  • 删除表

DROP TABLE IF EXISXS 表名;

如果表名存在就删除,也可以不加if exist

  • 删除数据库

DROP DATABASE 库名;

修改列表结构

  • 添加列名

ALTER TABLE 表名 ADD 列名 类型;

  • alter table hero_1 add position VARCHAR(20);

image

  • 修改列类型

ALTERT TABLE 表名 MODIFY 列名 类型;

  • 删除列

ALTER TABLE 表名 DROP 列名;

  • alter table hero_1 drop position;

image

  • 修改表名

REANME TABLE 表名 TO 新表名;

数据操作语言

  • 插入段名

INSERT INTO 表名 (字段1,字段2,字段3,...) VALUES (值1,值2,值3...);

  • 输入数据
   insert into hero_1(hero_id,hero_name,profession) VALUES
    (1,'李白','刺客'),   
    (2,'鲁班七号','射手'),
    (3,'吕布','战士'),
    (4,'安琪拉','法师'),   
    (5,'马超','战士'),
    (6,'马可波罗','射手'),  
    (7,'露娜','刺客'),  
    (8,'诸葛亮','法师 ),  
    (9,'司马懿','法师'),  
    (10,'澜','刺客');
 

image

  • 更新数据

UPDATE <表名> SET 字段1=值1, 字段2=值2, ... WHERE ...;

  • update hero_1 SET profession = '法师' where hero_name = '露娜';

image

  • tips

1.利用where语句可以同时更新多条记录
2.SET之后的赋值语句可以在原来的基础上改动

  • 删除数据

DELETE FROM 表名 WHERE 字段 = 值;

  • `delete from hero_1 where hero_name = '露娜';

image

数据查询语言SELECT

以下图的movie_data表格为例

image

  • 全部查询

SELECT * FROM 表名;

  • SELECT * FROM movie_data;

image

  • 条件查询

SELECT * FROM 表名 WHERE 列名1 >= n AND 列名2 <= m;

用来查找列1值大于等于n且列2值小于等于m的记录
注意where要直接接在from后面
逻辑连接词还有NOT,OR。如果不加括号,优先级为not>and>or

  • SELECT * FROM movie_data WHERe Director = 'Christopher Nolan';

image

  • 去除值重复

    SELECT DISTINCT 列名 FROM 表名;

    • SELECT DISTINCT Director from movie_data;
      查询数据库中所有存在的导演

    image

  • 投影查询
    SELECT 列名1 别名1,列名2,列名3 FROME 表名;
    返回结果为只包括所选取的三列的二位表结构,其中列名1被别名替代(不用改别名可以空着。查询结果中列的顺序和select中子句中的顺序相同

    • SELECT Director '导演', Actors '演员' FROM movie_data;

      image

  • 排序

SELECT 列名1,列名2, 列名3 FROM 表名 ORDER BY 列名1,列名2 (DESC);
将列名123从高到低排序,先比较列名1,相同时比较列2值大小
加上DESC表示倒序

  • select * from movie_data ORDER BY Rating desc;

image

  • 聚合查询

SELECT COUNT(*) FROM 表名;
查询表的全部行数

SELECT COUNT(列名1) 别名 FROM 表名 WHERE 列名1 >= n ;
带条件的聚合查询,同时命名新的列名为别名

  • select count(*) total from movie_data where Rating > 8;

image

  • group by

SELECT 列名1,列名2,列名3,.. FROM 表名 GROUP BY 列名1,列名2,...
group by可以把聚合查询的结果进一步切分

* `SELECT `Year` , AVG(Rating) FROM movie_data GROUP BY `Year` ;`  
* 查询每年投票数大于10000的全部电影的平均分数   

image

  • HAVING

由于group by 一般用于 select where from 之后,再需要分类就要用到having函数来判断

语法

SELECT <列名1>,<列名2><列名3>...  
  FROM <表名>  
  GROUP BY <列名1>,<列名2><列名3>...   
HAVING <分组结果对应条件>;  
* `SELECT `Year` , AVG(Rating) FROM movie_data  where Votes > 10000 GROUP BY `Year` HAVING AVG(Rating)>7;`

image

  • ROLLUP

ROLLUP是GROUP BY子句的扩展。 ROLLUP选项允许包含表示小计的额外行,通常称为超级聚合行,以及总计行。

select `Year` , Genre ,sum(Votes) as total_votes
	from movie_data
	group by  `Year`,Genre with rollup;

image image

查询每年每种电影的总投票,在最后一行会显示键值为NULL的超级聚合行,数值是该年全部总票数的加和,可以理解为小计。最后一行是总计。

  • 其他查询法
    SUM 计算列合计值,该列必须为数值类型
    AVG 计算列平均值,同样要求数值类型
    MAX 计算列最大值
    MIN 计算列最小值

  • 模糊查询
    语法
    SELECT * FROM <表名> WHERE <字段名> LIKE '通配符字符串';

mysql的通配符有两种

  • %:表示0个或多个字符
  • _:表示一个字符

SELECT * FROM movie_data WHERE Director LIKE '%James%';

image

CASE表达式

一般语法

CASE WHEN <判断表达式> THEN <表达式>
     WHEN <判断表达式> THEN <表达式>
     WHEN <判断表达式> THEN <表达式>
     .
     .
     ELSE <表达式>
END

SQL实用语句

  • 插入或替换
    REPLACE INTO 表名 (列名1,列名2...) VALUES (值1,值2,...);
    如果原记录存在,就会删除原记录替换为新记录

  • 插入或更新
    INSERT INTO 表名 (列名1,列名2...) VALUES (值1,值2,...) ON DULICATE KEY UPDATE 列名1 = 值1,列名2 = 值2...;
    若记录不存在,则插入新记录,否则,字段1为值1的记录会被update之后的内容更新

  • 插入或忽略
    INSERT IGNORE INTO students (字段1,字段2...) VALUES (值1,值2,...);
    若记录存在,则忽略,什么也不会发生

  • 快照
    CREATE TABLE 新表名 SELECT * FROM 原表名 WHERE 字段1 = 1;
    用于复制当前表的部分或全部数据到新表

  • 强制使用锁定指引
    SELECT * FROM 表名 FORCE INDEX (字段名);
    强制系统使用(列名)进行索引,前提是索引必须存在

SQL高级处理

窗口函数

也称为OLAP函数(Online analytical processing),可以对数据库进行实时处理。

  • 语法
<窗口函数> OVER ([partition by <列清单>])
ORDER BY <排序列清单>;
  • 用法
    1.作为窗口函数用的聚合函数(SUM,AVG,COUNT,MAX,MIN)
    2. RANK,DENSE_RANK,ROW_NUMBER 等专用窗口函数

    • Rank 函数
      在有相同位次的记录,会跳过后面的位次
      例如:1位,1位,1位,4位

    • DENSE_RANK 函数
      在有相同位次的记录,不会跳过后面的位次
      例如:1位,1位,1位,2位

    • ROW_NUMBer
      赋予唯一的连续位次
      例如在3条记录并列时:1位,2位,3位,4位

      • 一个rank函数的例子 先以电影类别分类,再以rating高低排序
select Title,Genre,Director,Actors,Year,`Runtime (Minutes)`,Rating, RANK() 
   	OVER (partition by Genre order by Rating)as rating 
   	from movie_data;  

PARTITION BY 能够设定排序的对象范围,横向划分表格。

ORDER BY 能够指定按照哪一列、何种顺序进行排序,纵向决定表的排序。

image

  • 一个sum函数作为窗口函数使用的例子
select `Rank`,Title,Votes,
	SUM(Votes) OVER (order by `Rank`) as total_votes
	from movie_data;  

image

python与SQL

PyMySQL

调出cmd面板 WIN键 + R, 输入cmd 回车'

  • 安装
    pip install PyMySQL

    image

  • 利用PyMySQL连接数据库

   conn=pymysql.connect(host = '127.0.0.1',
   ,user = 'root' 
   ,passwd='password'
   ,port= 3306
   ,db='test'
   ,charset='utf8')
   cur = conn.cursor()  #生成游标对象  
   cur.close() # 关闭游标  
   conn.close() # 关闭连接  
  • 插入
    sql= "INSERT INTO 表名 VALUES (值1,值2,值3)

  • 查询
    sql= "SELECT * FROM 表名 WHERE <判断语句>

  • 删除
    sql = "DELETE FROM 表名 WHERE <判断语句>


  • sql = UPDATE 表名 SET 字段1 = 值1

  • 执行

   cur.execute(sql)   # 执行插入的sql语句    
   data = cur.fetchfall() # 通过fetchfall方法获取数据

data是一个可迭代对象。

mysql.connector

import mysql.connector
conn=mysql.connector.connect(host = '127.0.0.1' # 连接名称,默认127.0.0.1 
,user = 'root' 
,passwd='password' 
,port= 3306 
,db='test' 
,charset='utf8' 
)

与PyMySQL相比较而言,最大的区别在于连接数据库时的语法不同,其余部分大同小异。

参考资料

[1]廖雪峰.廖雪峰SQL教程[EB/OL].https://www.liaoxuefeng.com/wiki/1177760294764384,2021-3-20.
[2][日]MICK.SQL基础教程[M].人民邮电出版社:北京,2013:1-102.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors