Mysql之细枝末节,你知道多少

——每天的寥寥几笔,坚持下去,将会是一份是沉甸甸的积累。


最近在接触hibernate,突然发现自己MySQL的基础还真不扎实,拿本书充充电。以下是有关Mysql Crash Course的学习笔记,供大家参考。

1.DISTINCT关键字,可以返回不同的值。

Select DISTINCT id from stu;//将返回stu表中不重复的id值


2.‘ 完全限定名:如database.table、table.column等,多用于多表操作。

Select stu.id from Class.stu


3. 用order by排序 ,order by后面跟着的是某一列(Select显示或不显示都可以)或多列(逗号分隔,此时按从左到右的优先级排序),并按字母顺序从A-Z排序,也可加关键字DESC来实现逆序排序(但DESC仅对直接位于其前面的列名起作用,因此多列逆排序时,每列前都应加DESC)。


4.空值检查用IS NULL


5.AND的优先级比OR高


6.IN操作符,可以给出合法值清单,用逗号分隔。可加NOT关键字,表示取反

Select name from stu where id IN (1,2,3);//返回id为1或2或3的学生的姓名


7.Mysql对大小写是否敏感是通过配置决定的。


8.通配符有两个,多通配符:%,但通配符_。


9.使用正则表达式搜索要使用REGEXP关键字

Select id from stu  where id REGEXP '.00'

11.

拼接字段:concat

Select Concat('(',id,name,')') from stu;//逗号分隔。字段名为字符串<span style="font-family: Arial, Helvetica, sans-serif;">Concat('(',id,name,')'),须改名</span>

使用别名:AS 

Select Concat('(',id,name,')')  AS id_name from stu;//取字段名为id_name
执行计算中的AS

Select name,MathGrade + JavaGrade AS TotalGrade from stu where id = '212160XXXX'


12.常用的文本处理函数

Left() 返回字符串左边的字符
Length() 返回字符串长度
Locate() 找出串的一个子串
Lower() 将串转换成小写
Ltrim() 去掉串左边的空格
SubString() 返回子串的字符

常用的日期处理函数

DateDiff()  计算日期之差
Date_Format() 格式化一个日期或字符串
DayOfWeek() 返回对应星期几
Now()  返回当前时间

常用的聚集函数

<pre name="code" class="java">AVG():忽略NULL的行
COUNT():*对所有的都计数,column对特定列计数(忽略NULL值)
MAX()
MIN()
SUM()

 
****以上五个函数都可指定DISTINCT参数 

13.分组、过滤数据

Group By

- group by后聚集会针对每一个组,而非总的结果集

- group by子句中列出的每个列必须是检索列或是表达式,不能是聚集函数

- 如果分组列中具有NUll值,那么将自动作为一个列返回,所有NULL都在该组中

- group by出现在where之后,orderby之前

- 默认排序不可靠,需要使用order by来给出明确的排序

Having :过滤分组

Select name, count(*) As sameNameNum from stu GROUP BY name HAVING count(*) >=2//返回同名人数大于等于2个的学生信息

14.Select子句顺序:Select -- from -- where -- group by -- order by -- limit


15.联结:

(1)内部联结,又称等值联结是基于两个表之间的相等测试。使用where或者inner join...on(推荐,符合SQL规范)

内联结是根据每个表中共有的列的值来匹配行,而忽略不匹配行

select vend_name,prod_name,pro_price from vendors,products where venders.vend_id = products.vend_id

select vend_name,prod_name,pro_price from vendors INNER JION products on venders.vend_id = products.vend_id

(2)用别名实现自联结

select p1.product_id,p1.prod_name from products AS p1, products AS p2 where p1.vend_id = p2.vend_id AND p2.prod_id = 'TNT';//自联结代替子查询提高效率
(3)外部联结

语法:使用LEFT(RIGHT) OUTER JION,其中OUTER可省略,on做判断。

特点:外部联结将包括多表之间没有关联的行,左联结将显示JION左边表中的所有行,即使该行没有匹配到右边表中相关数据,而右边表数据用NULL代替

举例:

-------------------------------------------------------------------
  a表     staff_id   name     b表     job_id   job   staff_id  
           1         张三                 1     23     1   
           2         李四                 2     34     2   
           3         王五                 3     34     4       
--------------------------------------------------------------------    
 1) 内联结   
  select   a.*,b.*   from   a   INNER   JION   b     on   a.staff_id=b.staff_id     
  结果是     
  1   张三                   1     23     1   
  2   李四                   2     34     2   
    
  2)左联结    
  select   a.*,b.*   from   a   LEFT   JOIN   b     on   a.staff_id=b.staff_id      
  结果是     
  1   张三                   1     23     1   
  2   李四                   2     34     2   
  3   王五                   null   

 3) 右联结   
  select   a.*,b.*   from   a   RIGHT   JOIN   b     on   a.staff_id=b.staff_id     
  结果是     
  1   张三                   1     23     1   
  2   李四                   2     34     2   
  null                       3     34     4  

16.需要注意的数据类型

CHAR  1-255个字符的定长串
VARCHAR 长度可变,<=255字节
BIT 1-64位
TINYINT -128-127


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值