order by 和 group by 是不一样的
SQL开天辟地笔记
TIPS
order by 和 group by 是不一样的
通用用法
调用
select [distinct] 列 from 表 [where 列 运算符 值] [order by 列1,列2 [desc]]
去重复 筛选 排序 逆序
插入
INSERT INTO 表名称 VALUES "值1, 值2,...."
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
修改
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
删除
DELETE FROM 表名称 WHERE 列名称 = 值
DELETE FROM 表 '等效于' DELETE * FROM 表
极值
SELECT TOP 数字|百分比 列 FROM 表
MySQL
SELECT column_name(s)
FROM table_name
LIMIT m,n 从m+1开始保留n个,m可以不要
Oracle
SELECT *
FROM Persons
WHERE ROWNUM <= 5
LIKE
WHERE 列 NOT LIKE '%a'或者'a%'或者'%a%'
WHERE 列 LIKE '%a'或者'a%'或者'%a%'
IN
WHERE 列 IN (value1,value2,...)
BETWEEN 包头不包尾**不同数据库不一样!!!!!!!!!!!!!!
BETWEEN value1 AND value2
SQL Alias 表列别名创建
表:便于查找
SELECT alias_name.column_name(s)
FROM table_name
AS alias_name
列:修改输出列名
SELECT column_name AS alias_name
FROM table_name
双表引用:
法1
SELECT 表1.列1, 表1.列2, 表.列1
FROM 表1, 表2
WHERE Persons.Id_P = Orders.Id_P
法2
JOIN 互补信息
FROM 表1 JOIN 表2 ON 表1.XXX=表2.XXX
JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
INNER JOIN和JOIN没有区别
SQL UNION 合并select输出的结果
SELECT column_name(s) FROM table_name1
UNION "ALL"
SELECT column_name(s) FROM table_name2
UNION 选取不同的值
UNION ALL 可以重复
SELECT INTO 选择拷贝
SELECT 列名
INTO new_table_name [IN externaldatabase]
FROM old_tablename
CREATE DATABASE 创建数据库
CREATE DATABASE database_name
通配符
通配符 | 描述 |
---|---|
% | 替代一个或多个字符 |
_ | 仅替代一个字符 |
[字符] | 字符列中的任何单一字符 |
[^字符] 或者 [!字符] | 不在字符列中的任何单一字符 |
CREATE TABLE 创建表
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
数据类型 | 描述 |
---|---|
integer(size) int(size) smallint(size) tinyint(size) | 仅容纳整数。在括号内规定数字的最大位数。 |
decimal(size,d) numeric(size,d) | 容纳带有小数的数字。 “size” 规定数字的最大位数。“d” 规定小数点右侧的最大位数。 |
char(size) | 容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。 在括号中规定字符串的长度。 |
varchar(size) | 容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。 在括号中规定字符串的最大长度。 |
date(yyyymmdd) | 容纳日期。 |
SQL约束
跟在数据类型后头限定数据格式、要求等
NOT NULL
不接受NULL,必须包含值,否则无法继续更新
UNIQUE
提供为唯一性保证
3种形式:
CREATE TABLE Persons
(
Id_P int UNIQUE
UNIQUE(Id_P,其他也可以)
)
建立后
ADD UNIQUE(Id_P)
增加限制名称
ADD CONSTRAINT 限制名称 UNIQUE (Id_P)
撤销
MySQL:
ALTER TABLE Persons
DROP INDEX uc_PersonID
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
PRIMARY KEY 主键
主键:必须是唯一值,不能是NULL
必须有且唯一
NOT NULL 限制是必须的
其实就是成行定位基准
MySQL:
尾部接
PRIMARY KEY (Id_P)
SQL Server/ Oracle/MS Access:
Id_P int NOT NULL PRIMARY KEY
定义约束名:
CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
添加:使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)
ALTER TABLE Persons
ADD PRIMARY KEY (Id_P)
ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
撤销:
MySQL:
ALTER TABLE Persons
DROP PRIMARY KEY
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID
这上面就很矛盾一下就说必须要建立主键,后面又能添加就很扯
FOREIGN KEY
CHECK
DEFAULT
函数
建立方式
SELECT function(列) FROM 表
简单函数
MS Access:
函数 | 描述 |
---|---|
AVG(column) | 返回某列的平均值 |
COUNT(column) | 返回某列的行数(不包括 NULL 值) |
COUNT(*) | 返回被选行数 |
FIRST(column) | 返回在指定的域中第一个记录的值 |
LAST(column) | 返回在指定的域中最后一个记录的值 |
MAX(column) | 返回某列的最高值 |
MIN(column) | 返回某列的最低值 |
STDEV(column) | |
STDEVP(column) | |
SUM(column) | 返回某列的总和 |
VAR(column) | |
VARP(column) |
SQL Server :
函数 | 描述 |
---|---|
AVG(column) | 返回某列的平均值 |
BINARY_CHECKSUM | |
CHECKSUM | |
CHECKSUM_AGG | |
COUNT(column) | 返回某列的行数(不包括NULL值) |
COUNT(*) | 返回被选行数 |
COUNT(DISTINCT column) | 返回相异结果的数目 |
FIRST(column) | 返回在指定的域中第一个记录的值(SQLServer2000 不支持) |
LAST(column) | 返回在指定的域中最后一个记录的值(SQLServer2000 不支持) |
MAX(column) | 返回某列的最高值 |
MIN(column) | 返回某列的最低值 |
STDEV(column) | |
STDEVP(column) | |
SUM(column) | 返回某列的总和 |
VAR(column) | |
VARP(column) |
MS Access 中的 Scalar 函数
函数 | 描述 |
---|---|
UCASE© | 将某个域转换为大写 |
LCASE© | 将某个域转换为小写 |
MID(c,start[,end]) | 从某个文本域提取字符 |
LEN© | 返回某个文本域的长度 |
INSTR(c,char) | 返回在某个文本域中指定字符的数值位置 |
LEFT(c,number_of_char) | 返回某个被请求的文本域的左侧部分 |
RIGHT(c,number_of_char) | 返回某个被请求的文本域的右侧部分 |
ROUND(c,decimals) | 对某个数值域进行指定小数位数的四舍五入 |
MOD(x,y) | 返回除法操作的余数 |
NOW() | 返回当前的系统日期 |
FORMAT(c,format) | 改变某个域的显示方式 |
DATEDIFF(d,date1,date2) | 用于执行日期计算 |
AVG()
SELECT AVG(column_name) FROM table_name
SELECT AVG(OrderPrice) AS OrderAverage FROM Orders
SELECT Customer FROM Orders
WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)