SQL常用语句
来源:互联网 发布:网络版权保护 编辑:程序博客网 时间:2024/06/07 01:36
部分内容转载自
http://www.cnblogs.com/simplefrog/archive/2012/07/30/2615169.html
http://blog.sina.com.cn/s/blog_4acbd39c0100qpsb.html
参考书籍:MySQL必知必会。
1. SHOW
SHOW DATABASES;
返回可用数据库的一个列表 SHOW TABLES;
返回当前可用数据库内可用的列表
2. DESC
SHOW COLUMNS FROM table_name;显示表结构DESCRIBE table_name;显示表结构DESC table_name;显示表结构
3. SELECT
SELECT column_name FROM table_name;从表中检索列SELECT column_name FROM table_name LIMIT 2;从表中检索列的前两行。SELECT column_name FROM table_name LIMIT 1,2;显示从表中检索到的列的2-3行。
4. DISTINCT
SELECT DISTINCT column_name FROM table_name;从表中检索内容不同的列。SELECT DISTINCT column_name FROM table_name LIMIT 2;
5. 使用完全限定的表名
SELECT table_name.column_name FROM table_name;
6. 排序
SELECT column_name FROM table_name ORDER BY column_name;排序的列可以与检索的列不同。SELECT column_name1,column_name2 FROM table_name ORDER BY column_name;检索两个列。SELECT column_name1,column_name2 FROM table_name ORDER BY column_name_3,column_name4;将检索到的列先按列1排序,再按列2排序。
7. 排序
SELECT column_name1,column_name2 FROM table_name ORDER BY column_name(column_name1,2,3) DESC;
注:
- DESC关键字只应用到直接位于其前面的排名,即只对列1降序,对其他列仍是升序排列。
在多个列上降序排列,需要对每个列都指定DESC关键字。
ASC升序关键字
- 使用 ORDER BY , 和LIMIT组合可以找出一个列中的最高或最低值.
- ORDER BY 要位于FROM后,LIMIT要位于ORDER BY后。
8. 过滤数据 WHERE
- WHERE 子句在表名(FROM table_name)之后给出。
SELECT column_name FROM table_name **WHERE**column_name=value;从表中检索值为1的所有行,显示这些行中的column_name列。
- ORDER BY应位于WHERE字句之后。
WHERE子句操作符
=
等于 <>
不等于 !=
不等于 <
小于 <=
小于等于 >
大于 >=
大于等于 BETWEEN
在指定的两个值之间检查单个值
SELECT column_name1 FROM table_name WHERE column_name=value;SELECT column_name1 FROM table_name WHERE column_name<=value;
不匹配检查
SELECT column_name FROM table_name WHERE column_name<>value;SELECT column_name FROM table_name WHERE column_name!=value;
BETWEEN
SELECT column_name FROM table_name BETWEEN value1 AND value2;
空值检查
SELECT column_name FROM table_name WHERE column_name IS NULL;
9. 组合WHERE子句
AND(可以添加多个过滤条件,每添加一条就要使用一个AND)
SELECT column_name1,column_name2 FROM table_name WHERE column_name1=value1 AND column_name2<>value2;
OR(条件中满足任一一个就可以)
SELECT column_name1,column_name2 FROM table_name WHERE column_name1=value1 OR column_name2<>value2;
计算次序
SQL在处理OR操作符之前,优先处理AND操作符。
SELECT column_name FROM table_name WHERE (column_name1=value1 OR column_name2=value2) AND column_name3=value3;
IN
SELECT column_name1,column_name2 FROM table_name WHERE column_name IN(value1,value2,value3) ORDER BY column_name;
NOT(MySQL中的NOT,支持对IN,BETWEEN和EXISTS子句取反。)
SELECT column_name FROM table_name WHERE column_name NOT IN(value1,value2,value3);
10. 用通配符进行过滤
LIKE指示MySQL后跟的搜索模式,利用通配符等匹配,而不是直接相等的匹配。
- % 百分号
(%代表搜索模式中给定位置有0个1个或多个字符。LIKE ‘%’不匹配null)
SELECT column_name FROM table_name WHERE column_name LIKE '%jet';匹配jet结尾的词。
- _ 下划线(下划线只匹配单个字符而不是多个字符)
SELECT column_name FROM table_name WHERE column_name LIKE '_jet';匹配jet结尾的词。
11. 使用别名
SELECT Concat(RTRIM(column_name1),’(‘,RTRIM(column_name2),’)’) AS column_name3 FROM table_name WHERE column_name4 = value ORDER BY column_name;
12. MySQL算术操作符
13. 数据处理函数
SELECT column_name,Upper(column_name) AS column_name1 FROM table_name;
常用的文本处理函数
SELECT column_name FROM table_name WHERE Soundex(column_name)=Soundex("values");
14. 常用日期和时间处理函数
Date()
返回日期时间的时期部分 DateDiff() 返回两个日期只差 DateFormat() 返回一个格式化的日期或时间 Day() 返回一个日期的天数部分 DayOfWeek() 返回一个日期对应的是星期几 Hour() 返回一个日期的小时部分 Minute() 返回一个日期的分钟部分 Month() 返回一个日期的月份 Second() 返回一个日期的秒数 Year() 返回一个日期的年份Select column_name1,column_name2 FROM table_name WHERE Data(column_date) BETWEEN value1 AND value2;SELECT column_name FROM table_name WHERE Year(column_name)=2005 AND Month(column_name)=9;
15. 数值处理函数
16. 汇总数据
聚集函数,运行在行组上。计算和返回单个值的函数。
SQL聚集函数
* AVG()只能用于单列,只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出,为了获得多个列的平均值,必须使用多个AVG()函数。
* AVG()函数忽略列值为NULL的列。
* COUNT()函数进行计数,可利用COUNT()函数.
* 使用COUNT(*)对表中行的数目进行计数,不管表列中包含的是否是空值(NULL)还是非空值。
* 使用COUNT(column_name)对特定列具有值的行进行计数,忽略NULL值。
SELECT COUNT(column_name) AS column_name2 FROM table_name;只对列中有值的行进行计数。
SELECT SUN(column1*column2) AS column3 WHERE column4=value;返回指定行列1*列2的和。
SELECT AVG(DISTINCT column_name) AS column_name2 WHERE column_name3=value;聚集不同值
16. 分组数据
GROUP BY 和 HAVING
数据分组:分组允许把数据分为多个逻辑组,以便能对每个组进行聚集计算。
分组在SELECT语句和GROUP BY语句中建立。
(1)创建分组
SELECT column_name,COUNT(*) AS new_cloumn FROM table_name GROUP BY column_name;
(2)过滤分组
SELECT column_name,COUNT(*) AS new_cloumn FROM table_name GROUP BY column_name HAVING COUNT(*)>=value;SELECT column_name,COUNT(*) AS new_cloumn FROM table_name WHEREGROUP BY column_name HAVING COUNT(*)>=value;
(3)ORDER BY 与 GROUP BY
17. SELECT 语句中子句的顺序
18. 子查询
SELETE column_name FROM table_name WHERE column_name IN(SELETE column_name1 FROM table_name1 WHERE column_name=value );
19. 联结表join
- 主键:一列(或一组列)其值能唯一区分表中每个行。
- 外键:某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。
SELECT column1,column2,column3 FROM table1,table2 WHERE table1.column1=table2.column2 ORDER BY column1,column2;
内部联结
SELETE column1,column2,column3 FROM table INNER JOIN ON table1.column1=table2=column2;
联结多个表时可以使用AND;
20. 插入数据
(1)INSERT
INSERT INTO table values(...value1,2,3),(...),(...);
- 如果不提供列名,则对每个列提供值,如果列没有值,则为NULL.
- 如果提供列名,则对每个列给出一个值。
- 使用INSERT LOW_PRIORITY 降低优先级。
(2)插入多行数据
INSERT INTO table(column1,2,3..) VALUES(value1,2,3..),(1,2,3..);
21. 更新和删除数据
UPDATE table SET column=value WHERE column=value2;UPDATE table SET column=value,column1=value1 WHERE column3=value3;
- UPDATE IGNORE table…忽略错误;
22. 删除数据
DELETE FROM table WHERE column=value;
DELETE 与TRUNCATE的区别
区别
- 1.delete from后面可以写条件,truncate不可以。
- 2.delete from记录是一条条删的,所删除的每行记录都会进日志,而truncate一次性删掉整个页,因此日至里面只记录页释放,简言之,delete from更新日志,truncate基本不,所用的事务日志空间较少。
- 3.delete from删空表后,会保留一个空的页,truncate在表中不会留有任何页。
- 4.当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。truncate始终锁定表和页,而不是锁定各行。
- 5.如果有identity产生的自增id列,delete from后仍然从上次的数开始增加,即种子不变,而truncate后,种子会恢复初始。
- 6.truncate不会触发delete的触发器,因为truncate操作不记录各个行删除。
总结
- 1.truncate和 delete只删除数据不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态。 - 2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发
truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger。 - 3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动
显然drop语句将表所占用的空间全部释放
truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始)。 - 4.速度,一般来说: drop> truncate > delete。
- 5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及。
- 6.使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大. 想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。
23. 全文本搜索
(1)使用全文本搜索
为了进行全文本搜索,必须索引被搜索的列,而且要随着数据的改变不断的重新索引,在索引后,SELETE 可与Match()和Against()一起使用已实际执行的索引。
(2)进行全文本搜索
SELETE column FROM table WHERE Match(column) Against('value');
(3)查询扩展
SELETE column FROM table WHERE Match(column) Against('value' WITH QUERY EXPANSION);
24. 布尔文本搜索
SELETE column FROM table WHERE Match(column) Against('value -abcde' IN BOOLEAN MODE);
全文本布尔操作符
创建和操纵表
http://blog.sina.com.cn/s/blog_4acbd39c0100qpsb.html
- SQL语句 常用语句
- sql常用sql语句
- SQLite 常用语句 sql语句
- oracle常用SQL语句
- DBA常用SQL语句
- DBA常用SQl语句
- 常用SQL语句
- 常用SQL语句
- oracle常用SQL语句
- oracle常用SQL语句
- 管理常用SQL语句
- 管理常用SQL语句
- 管理常用SQL语句
- 常用SQL语句(Update)
- 常用SQL语句
- SQL常用语句大全
- 常用sql语句1
- 常用Sql语句
- solr -- 安装及配置
- NSOperation 并发实现
- 《机器学习实战》学习笔记(四)之Logistic(上)基础理论及算法推导、线性回归,梯度下降算法
- redis(3)
- Zabbix 监控 Mysql
- SQL常用语句
- Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例
- Could not initialize class sun.awt.X11GraphicsEnvironment linux中影像缩略图
- 计算1+3+5+...+99+101的值
- spring boot实战(第八篇)上下文的创建
- 策略模式
- n元语法
- 页面数据库特殊字符处理
- maven错误