数据库对比
MySQL
不标准sql:自动类型转换
MySQL类型会做自动转换 例如:会将“1”先转为some_num相同的类型
select some_num from a_table where some_num="1";
年月日字串可自动转为时间,
每个数据库处理date格式有些不同,所以建议日期用字串
不标准sql:引号
MySQL表示字符串的‘’和’通用,sql标准用 ’建议用单引号
不标准sql:空格
select some_str from a_table where some_str="need ";
select some_str from a_table where some_str="need";
MySQL自动去除字串尾部空格,上边两句一样
特有关键字:limit
作用:获取指定几行的数据,(列表切片操作)
用法:
limit n
前n行数据。
limit start,n
从下标为start开始的n条数据,下标从0开始
sql
查
查全部字段
select * from a_table;
会多一步,会先自动查一遍field list 然后转换成如下语句
select all_field_name from a_table;
为了让别人看到用到什么,建议不写*
字段名临时名
select a_field_name as new_name from a_table;
as可以省略,但建议不省略
between
select some_num from a_table where between a and b;
闭区间:between a and b <=> x>=a and x<=b
符号
通配符% 占位符_
排序
默认asc可不写
select * from a_table order by a_field_name asc;
select * from a_table order by a_field_name desc;
select all_field_name from a_table order by 5 desc;
下标排序时建议写出全部字段名,当表结构改变时第5个未必是你预设要排的字段
处理函数
Lower(字段名) :转小写
upper(字段名):转大写
substr(字段名,起始下标,字串长度):截取子串,首字母下标为1
length(字段名):取长度
trim(字串):去前后全部空格
str_to_date(字符串,格式):字串转日期,格式例如‘%Y-%m-%d’
date_format:格式化日期
format:设置千分位
round(处理的数字,保留几位小数=0):四舍五入,保留位数∈整数, 不写默认0
rand():生成随机数[0,1]
Ifnull:转null为另一个值
跨表查询
内连接:找出符合匹配条件的全部数据
1 等值连接:92版 查询次数等于笛卡尔积数
2 非等值连接:
3 自连接:
外链接:并不只显示匹配的结果,还可显示其中一张表的其他未匹配项,并将匹配值设为null。即外链接=内连接+某表未匹配
左外连接,左表列全显示(= from后边第一个全显示 且 新表再左), left outer 可简写为 left
右连接,右表列全显示(= from后边第一个全显示 且 新表再右),right outer 可简写为 right
selct
left_table.field_name_1,right_table.field_name_1
from
left_table
right outer join
right_table
on
left_table.field_name_2 = right_table.field_name_2
where
(略)
查的注意事项
查询不包含 NULL 的集合 (这段来自《SQL进阶教程》)
COUNT
函数的使用方法有 COUNT(*)
和 COUNT( 列名 )
两种,它们的区别有两个:第一个是性能上的区别;第二个是 COUNT(*)
可以用于 NULL
,而 COUNT( 列名 )
与其他聚合函数一样,要先排除掉 NULL
的行再进行统计。第二个区别也可以这么理解:COUNT(*)
查询的是所有行的数目,而 COUNT( 列名 )
查询的则不一定是。
对一张全是 NULL
的表 NullTbl 执行 SELECT
子句就能清楚地知道两者的区别了。
NullTbl
col_1(列 1) |
---|
|
|
|
-- 在对包含NULL 的列使用时,COUNT(*) 和COUNT( 列名) 的查询结果是不同的
SELECT COUNT(*), COUNT(col_1)
FROM NullTbl;
执行结果
count(*) count(col_1)
-------- ------------
3 0
增
删
改