todo:sql 食用手册
------> From Albert
注意:不同数据库,关键字和语句会不一样,若不能运行,可单独百度‘xxx数据库 xxx关键字’
import time
import sqlite3
db_path = r’C:\Users\86131\Desktop\ndhd_cw_001.db’
conn = sqlite3.connect(db_path)
c = conn.cursor()
1.select:查询
(1)查询某列
c.execute(‘select 字段 from 表’)
(2)查询全部
c.execute(‘select * from 表’)
2.distinct:去重
(1)某列去重
c.execute(‘select distinct 字段 form 表’)
(2)多列去重(合并多列完全相同的)
c.execute(‘select dintinct 字段01 字段02 … from 表’)
(3)全去重(合并整行完全相同的)
c.execute('select distinct * from 表 ')
3.where:条件
select 字段 from 表 where 字段 运算符 值
‘’’
运算符:
等于: =
不等于: <> (某些版本sql中,写为: != )
大于: >
小于: <
大于大于: >=
小于等于: <=
在某个范围内: between
搜索某种模式: like
‘’’
4.AND 和 OR 运算符:用于基于一个以上的条件对记录进行过滤
c.execute(‘select 字段 from 表 where (条件01 AND 条件02) OR 条件03’)
5.order:排序(默认升序,asc升,desc降)
c.execute(‘select 字段01, 字段02, 字段03 from 表 order by 字段01, 字段02 asc, 字段03 desc’)
6.insert:插入
(1)直接插入
c.execute(‘insert into 表 values (值01, 值02,)’)
(2)按列插入
c.execute(‘insert into 表 (列01, 列02, 列03) values (值01, 值02, 值03)’)
7.update:更新
c.execute(‘update 表 set 字段 = 值 where 条件’)
8.delete:删除
(1):删除表数据
c.execute(‘delete from 表’)
(2):删除行数据
c.execute(‘delete from 表 where 条件’)
9.limit:限制查询行数
c.execute(‘select 字段 from 表 limit 数字’)
10.like + 通配符
c.execute(‘select * from 表 where 字段 like 通配符公式’)
‘’’
通配符
替代一个或多个字符: %
替代一个字符: -
列表(不加逗号)里的任一字符: [charlist]
非列表(不加逗号)里的任一字符: [^charlist] 或 [!charlist]
‘’’
11.between/in:范围
c.execute('select * from 表 where 字段 between 值01 and 值02 ')
c.execute(‘select * from 表 where 字段 in (值01, 值02, 值03, …)’)
12.Alias:
(1):表 名称 指定别名
c.execute(‘select a.id,a.name,b.money from sql_notebook as a,sql_notebook001 as b where a.id = b.id’)
(1):字段 名称 指定别名
c.execute(‘SELECT LastName AS Family, FirstName AS Name FROM Persons’)
13.join:
c.execute(‘select a.id,a.name,b.money from sql_notebook as a,sql_notebook001 as b from a inner join b on a.id = b.id’)
等效于
c.execute('select a.id,a.name,b.money from sql_notebook as a inner join sql_notebook00
‘’’
JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
‘’’
14.union:合并两个或多个
SELECT 语句的结果集(SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。)
如果允许重复的值,使用 UNION ALL
c.execute('select a.id from sql_notebook as a UNION select b.id from sql_notebook001 as b ')
15.select into:创建表的备份复件
c.execute(‘SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P’)
ps:sqlite不适用该语法,等效:
c.execute(‘CREATE TABLE newtable AS SELECT * FROM oldtable’)
16.creat database:创建数据库
c.execute(‘craeat database db_name’)
17.creat table:创建表
c.execute(‘CREATE TABLE 表名称(
字段01 数据类型,
字段02 数据类型,
字段03 数据类型,
…
)’)
todo 数据类型:(暂列举sqlite)
‘’’
sqlite:
1. NULL,值是NULL
2. INTEGER,值是有符号整形,根据值的大小以1,2,3,4,6或8字节存放
3. REAL,值是浮点型值,以8字节IEEE浮点数存放
4. TEXT,值是文本字符串,使用数据库编码(UTF-8,UTF-16BE或者UTF-16LE)存放
5. BLOB,只是一个数据块,完全按照输入存放(即没有准换)
大多数的数据库引擎(到现在据我们所知的除了sqlite的每个sql数据库引擎)都使用静态的、刚性的类型,使用静态类型,数据的类型就由它的容器决定,这个容器是这个指被存放的特定列。
Sqlite使用一个更一般的动态类型系统,sqlite中,值的数据类型跟值本身相关,而不是与它的容器相关。
Sqlite的动态类型系统和其他数据库的更为一般的静态类型系统相兼容,但同时,sqlite中的动态类型允许它能做到一些传统刚性类型数据库所不可能做到的事。
‘’’
18.constraints:约束
(1)not null:不向字段添加值,无法插入新记录或者更新记录
c.execute(’’‘CREATE TABLE Kzz
(Code TEXT NOT NULL,
Total_Investment_Amounts REAL NOT NULL);’’’)
(2)unique:约束唯一标识数据库表中的每条记录
每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束
(2.1)创建 表 的时候 创建unique约束
c.execute(’’‘CREATE TABLE Persons(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P)
)’’’)
(2.2)表 已存在 创建unique约束
c.execute(‘ALTER TABLE 表 ADD UNIQUE (字段)’
(2.3)命名 UNIQUE 约束,创建 多列约束
c.execute(’’‘ALTER TABLE 表
ADD CONSTRAINT 约束名 UNIQUE (字段01,字段02)’’’)
(2.3)撤销 UNIQUE 约束
c.execute(’’‘ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID’’’)
(3):PRIMARY KEY:主键 约束
(3.1)创建
c.execute(’’‘CREATE TABLE Persons
(
Id_P int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
‘’’)
(3.2)命名 PRIMARY KEY 约束,为多个列定义 PRIMARY KEY 约束
c.execute(’’‘CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
)
‘’’)
(3.3)表 已存在 创建unique约束
c.execute(’’‘ALTER TABLE Persons
ADD PRIMARY KEY (Id_P)’’’)
(3.4)撤销约束
c.execute(’’‘ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID’’’)
(4):FOREIGN KEY:外键 约束
删除:从表记录不存在时,主表才可以删除。删除从表,主表不变
更新:从表记录不存在时,主表才可以更新。更新从表,主表不变
(4.1)创建
c.execute(’’‘CREATE TABLE Orders
(
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)’’’)
(4.2)FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束
c.execute(’’‘CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
REFERENCES’’’)
(4.3)表已存在的情况下为 “Id_P” 列创建 FOREIGN KEY 约束
c.execute(’’‘ALTER TABLE Orders
ADD FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)’’’)
(4.4)撤销 FOREIGN KEY 约束
c.execute(’’‘ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders’’’)
还有:
‘’’
SQL Check
SQL Default
SQL Create Index
SQL Drop
SQL Alter
SQL Increment
SQL View
SQL Date
SQL Nulls
SQL isnull()
SQL 函数
SQL functions
SQL avg()
SQL count()
SQL first()
SQL last()
SQL max()
SQL min()
SQL sum()
SQL Group By
SQL Having
SQL ucase()
SQL lcase()
SQL mid()
SQL len()
SQL round()
SQL now()
SQL format()
‘’’
start_time = time.time()
look = c.execute(sql)
end_time = time.time()
continuous_time = end_time - start_time
print(‘运行该sql语句的时间为{}’.format(str(continuous_time)) + ‘s’)
for i in look:
print(i)