——每天的寥寥几笔,坚持下去,将会是一份是沉甸甸的积累。
最近在接触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
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'
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