常见的SQL语句整理

1.SQL 对大小写不敏感
2.每条语句后使用分号

二.重要的SQL命令
SELECT - 从数据库中提取数据
UPDATE - 更新数据库中的数据
DELETE - 从数据库中删除数据
INSERT INTO - 向数据库中插入新数据
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引

三.SELECT
1.SELECT column_name,column_name FROM table_name;
2.SELECT * FROM table_name;
3.SELECT DISTINCT column_name,column_name FROM table_name; 返回唯一值
4.SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;
(where后面的操作除了一般的等于,<>不能于,大于,小于等等,还有between,like(某种模式),in(指定针对某个列的多个可能值)
5.SELECT * FROM Websites
WHERE country=‘CN’
AND alexa > 50;
AND & OR 运算符用于基于一个以上的条件对记录进行过滤。
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录
6.SELECT * FROM Websites
WHERE alexa > 15
AND (country=‘CN’ OR country=‘USA’); 数字的话不需要用单引号,文本需要

四.ORDER BY 关键字用于对结果集进行排序
1.ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。
2.ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;

五.INSERT INTO 语句用于向表中插入新记录
1.第一种形式无需指定要插入数据的列名,只需提供被插入的值即可
INSERT INTO table_name
VALUES (value1,value2,value3,…);
2.第二种形式需要指定列名及被插入的值:
INSERT INTO table_name (column1,column2,column3,…)
VALUES (value1,value2,value3,…);

六.UPDATE 语句用于更新表中已存在的记录
UPDATE table_name
SET column1=value1,column2=value2,…
WHERE some_column=some_value;

七.DELETE 语句用于删除表中的行
1.DELETE FROM table_name
WHERE some_column=some_value;
2.删除所有的行

八.选取指定的记录数 select limit
1.Mysql 语法
SELECT column_name(s)
FROM table_name
LIMIT number;
2.Oracle语法
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;

九.Like LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式
SELECT column_name(s)
FROM table_name
WHERE column_name (NOT)LIKE pattern; 匹配和不匹配 后面的模式可以用通配符来写

十.通配符 通配符与 SQL LIKE 操作符一起使用
1.%表示0个或多个字符
2._表示一个字符
3.使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式
SELECT * FROM Websites
WHERE name REGEXP ‘1’;
表示以G,F或s开头的字符串
SELECT * FROM Websites
WHERE name REGEXP ‘[A-H]’; 不以字母A-H开头

十一.IN
SELECT column_name(s)
FROM table_name
WHERE column_name (not) IN (value1,value2,…);

十二.Between
SELECT column_name(s)
FROM table_name
WHERE column_name (Not) BETWEEN value1 AND value2;

十二.别名AS
1.列的别名
SELECT column_name AS alias_name
FROM table_name;
2.表的别名
SELECT column_name(s)
FROM table_name AS alias_name;
3.查询两个表里面的数据
SELECT w.name, w.url, a.count, a.date
FROM Websites AS w, access_log AS a
WHERE a.site_id=w.id and w.name=“菜鸟教程”;

十三.表的连接JOIN
1.SELECT Websites.id, Websites.name, access_log.count, access_log.date
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id;
INNER JOIN:如果表中有至少一个匹配,则返回行(交集)
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行

十四.UNION
1.用于合并两个或多个 SELECT 语句的结果集。
2.UNION 内部的每个 SELECT 语句必须拥有相同数量,相同顺序,相同数据类型的列
3.不包含重复值
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
4.包含重复值
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
5.UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名
6.带条件的合并
SELECT country, name FROM Websites
WHERE country=‘CN’
UNION ALL
SELECT country, app_name FROM apps
WHERE country=‘CN’
ORDER BY country

十五.INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中
1.INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;

十六.创建数据库
CREATE DATABASE dbname;

十七.创建表
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),

);
data_type 参数规定列的数据类型(例如 varchar、integer、decimal、date 等等)。
size 参数规定表中列的最大长度。

十八.约束
1.约束用于规定表中的数据规则
2.CREATE TABLE table_name
(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,

);
NOT NULL - 指示某列不能存储 NULL 值。
UNIQUE - 保证某列的每行必须有唯一的值。
PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
CHECK - 保证列中的值符合指定的条件。
DEFAULT - 规定没有给列赋值时的默认值。
3.mysql版本
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)
4.Oracle
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)

十九.创建索引
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据
1.允许使用重复的值
CREATE INDEX index_name
ON table_name (column_name)
2.不允许使用重复的值
CREATE UNIQUE INDEX index_name
ON table_name (column_name)

二十.删除索引,表,数据库
1.删除数据库
DROP DATABASE database_name
2.删除表
DROP TABLE table_name
3.删除索引
[1]mysql
ALTER TABLE table_name DROP INDEX index_name
[2]oracle
DROP INDEX index_name
4.删除表的内容,不删除表
TRUNCATE TABLE table_name

二十一.ALTER TABLE 语句用于在已有的表中添加、删除或修改列
1.添加列
ALTER TABLE table_name
ADD column_name datatype
2.删除列
ALTER TABLE table_name
DROP COLUMN column_name
3.改变列的数据类型
ALTER TABLE table_name
MODIFY COLUMN column_name datatype

二十二.Auto-increment 会在新记录插入表中时生成一个唯一的数字
1.mysql
CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
)
修改起始值用
ALTER TABLE Persons AUTO_INCREMENT=100
[2]oracle
通过 sequence 对象(该对象生成数字序列)创建 auto-increment 字段
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
插入记录的时候使用如下
INSERT INTO Persons (ID,FirstName,LastName)
VALUES (seq_person.nextval,‘Lars’,‘Monsen’)

二十三.函数
1.SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。
有用的 Aggregate 函数:
AVG() - 返回平均值 SELECT AVG(count) AS CountAverage FROM access_log;
COUNT() - 返回行数 SELECT COUNT(DISTINCT site_id) AS nums FROM access_log; 返回指定列不同值的个数
FIRST() - 返回第一个记录的值 只有 MS Access 支持 FIRST() 函数
LAST() - 返回最后一个记录的值 只有 MS Access 支持 FIRST() 函数
MAX() - 返回最大值
MIN() - 返回最小值
SUM() - 返回总和
2.SQL Scalar 函数基于输入值,返回一个单一的值。
有用的 Scalar 函数:
UCASE() - 将某个字段转换为大写
LCASE() - 将某个字段转换为小写
MID() - 从某个文本字段提取字符,MySql 中使用 SELECT MID(column_name,start[,length]) FROM table_name;
SubString(字段,1,end) - 从某个文本字段提取字符
LEN() - 返回某个文本字段的长度
ROUND() - 对某个数值字段进行指定小数位数的四舍五入
NOW() - 返回当前的系统日期和时间
FORMAT() - 格式化某个字段的显示方式
3.group by 根据某个列对结果进行分组,常和聚合函数结合使用
[1]统计 access_log 各个 site_id 的访问量
SELECT site_id, SUM(access_log.count) AS nums
FROM access_log GROUP BY site_id;
[2]多表连接,统计所有网站的访问量
SELECT Websites.name,COUNT(access_log.aid) AS nums FROM access_log
LEFT JOIN Websites
ON access_log.site_id=Websites.id
GROUP BY Websites.name;
4.Having子句
where不能和聚合函数一起用,having可以
[1]查找总访问量大于200的网站
SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log
INNER JOIN Websites
ON access_log.site_id=Websites.id)
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;
[2]查找总访问量大于 200 的网站,并且 alexa 排名小于 200
SELECT Websites.name, SUM(access_log.count) AS nums FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
WHERE Websites.alexa < 200
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;


  1. GFs ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值