首页 > 技术文章 > sql基本知识整理

ffhblogs 2017-09-27 20:31 原文

1. CONCAT拼接字符串
as 可理解为:用作、当成,作为,select column_1 as 列1 from table as表:意思是选择column_1作为列1从table当成表
2. count(1)和count(主键) 这两个只扫描主键Index就可以得到数据,1就代表你这个查询的表里的第一个字段,count(*)是扫描表的
3. d.`name`省份,
c.`name` logisticsname 这两行中带` `只是一个区分,用来区c和d表中相同字段name代表不同的值
busi_logistic c ON c.`code` = a.logisticscode
busi_area_data d on b.shad_name = d.`code`这两个code也用` `来表示不同表中相同字段的不同的值
4.order by 用法: ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序, 用 DESC

group by 用法:GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划 分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。实际上就是分类汇总
group by 子句必须出现在where子句之后, order by 之前

distinct 用法:关键词 distinct用于返回唯一不同的值。 1.作用于单列或多列 2.COUNT统计 3.distinct必须放在开头
作用于多列,是根据多个字段来去重的,分别作用于多列
select count(distinct name) from A; --表中name去重后的数目,,,count是不能统计多个字段的

5. 优化查询速度:explain select * from 表 FORCE INDEX (主键) explain 查看数据查询速度,要查多少行进行筛选 用EXPLAIN使你的SELECT查询更加清晰EXPLAIN查询的结果,可以告诉你那些索引正在被引用,表是如何被扫描和排序的等等

force index 进行索引优化查询(点击表-右击-对象信息-DDL:查看主键信息)索引中的检索字段,索引不仅是主键或唯一键。如果你想搜索表中的任何列,你应该一直指向索引

leftjoin 少用---FROM orders a,orderlines b WHERE a.id=b.myorder 保证连接的表的字段是相同的类型

limit 5 扫描5行后将停止扫描,而不是去扫描整个表或索引

in与=: 因为查找次数并不会随着IN字段是否有索引而减少,所以应尽量避免使用IN查询;增加子查询字段的索引将极大的减少查询次数 =多用于一个字段的查询 in 一般是多个字段


6.字符匹配:%百分号为通配符 _ 下横线 代表任意单个字符 where name like '刘%' ESCAPE'\'表示‘\’为转码字符,这样匹配串中紧跟在‘\’后面的字符'_'不具有通配符的含义,转义为普通的‘_’含义

7. count(*)统计元组的个数 格式:count[distinct/all](列名) Count()中的表达式是否为NULL,如果为NULL则不计数,而非NULL则会计数 count*那么最简单的执行办法是找一列NOT NULL的列,如果该列有索引,则使用该索引
count(列名)统计一列中值的个数
聚集函数都忽略null值
如:
ID DD count(1)和count(*)基本没有差别!
1 e
2 null
select count(*) from table --结果是2
select count(DD) from table ---结果是1 count(*)是针对于全表的,而count(列)是针对于某一列的,如果此列值为空的话,count(列)是不会统计这一行的

 

8.转换:SQL 中怎么把字符串转换为数字 convert(int,字段名) cast(字段名 as int) 例如:把123转换成char型 select cast(123 as char)
可用的类型 
二进制,同带binary前缀的效果 : BINARY 字符型,可带参数 : CHAR() 日期 : DATE 时间: TIME 日期时间型 : DATETIME
浮点数 : DECIMAL 整数 : SIGNED 无符号整数 : UNSIGNED

9.快捷键:ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口
ctrl+l(L) 删除一行 mysql执行状态分析 show processlist

数据类型:
整数类型:int、integer、tinyint、smallint。
布尔类型:bit、boolean。
字符型:varchar、tinytext、longtext、text、longvarchar、char、nchar、nvarchar、clob、nclob。
数值类型:decimal、numeric、real、float、double。
时间日期类型:datetime、date、timestamp、time。s
二进制类型:blob、tinyblob、longblob、binary、varbinary、longvarbinary、image

11. mysql执行状态分析: show processlist 显示进程
kill ID 杀掉进程 show index from xxx;查看表的索引 describe 表名--表结构 PRI主键约束;UNI唯一约束;MUL可以重复。

12.-- 列子查询
如果子查询结果返回的是一列。
使用 in 或 not in 完成查询
exists 和 not exists 条件
如果子查询返回数据,则返回1或0。常用于判断条件。
select column1 from t1 where exists (select * from t2);
-- 行子查询
查询条件是一个行。
select * from t1 where (id, gender) in (select id, gender from t2);
行构造符:(col1, col2, ...) 或 ROW(col1, col2, ...)
行构造符通常用于与对能返回两个或两个以上列的子查询进行比较。

13.where在分组前过滤,having在分组后过滤
having 字段必须是查询出来的,where 字段必须是数据表存在的。
where 不可以使用字段的别名,having 可以。因为执行WHERE代码时,可能尚未确定列值。
where 不可以使用合计函数。一般需用聚合函数才会用 having

推荐阅读