sql知识助记(未完待续)

数据库对比

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

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值