MySql必知必会阅读笔记

1.delete的时候是直接deletefrom tableName where ….注意 没有 *

2.联合主键:所有列的组合必须是唯一的,(但是单个列的值可以不唯一)

3.常用命令:

SHOW DATABASES(展示所有数据库;

USE databaseName(使用某一个数据库);

SHOW TABLES(获取一个数据库内的表);

SHOW CLOUMNS FROM tableName(展示某个表内的所有列)等同于DESCRIBE tableName

4.多条SQL语句必须以(;)分割,当心逗号(,)不要写多了

5.建议:SQL关键字是用大写列名和表名使用小写

6.直接select的数据,如果没有明确排序查询结果,则返回的数据的顺序没有特殊意义,只要返回的行是相同的数据就是正常的

7.数据的格式化是一个表示问题,而不是一个检索问题

8.DISTINCT关键字应用于所有列而不是前置他的列,例如SELECTDISTINCT vend_id,prod_price 除非制定的两个列都不同,否则所有行都将被检索出来。

9. LIMIT用法 注意 行标从0开始

SELECT prod_name FROM products LIMIT 0,1会检索到第一条

SELECT prod_name FROM products LIMIT 1 检索出的也是第一条

LIMIT 3,4 意思是从行4(行标是从0开始的)开始的4行

LIMIT n等价于 LIMIT 0,N

LIMIT 5,10;  // 检索记录行 6-15

具体示例

Limit 0,1 等同于 limit 1  limit 0什么也查不到的

Limit 3,4 从第4行开始检索出4行

10.多个排序的时候

order by column,column2

仅仅多个行具有相同的column1值时候才会对cloumn2进行排序 如果cloumn1中所有的值都是唯一的,则不会按cloumn2进行排序

11.关于DESC SAC

默认排序是升序ASC(可以不写的)

SELECT * FROM products ORDER BY prod_price DESC,prod_name;

DESC只作用其前面的列,本例子中prod_price列指定了DESC ,pord_name列不指定,因此prod_price列可以降序排序,但是prod_name列(在每个价格内)仍然是升序排列

如果想要在多个列上进行降序排列,那么必须对每个列指定DESC关键字

12.ORDER BY顺序

ORDER BY在from后,limit在ORDER BY后。OREDRBY在WHERE后

13.WHERE条件中的不等于有2种写法<>  !=

14.mysql在执行匹配时候默认不区分大小写 where prod_name=’fuses’会返回 prod_name为Fuses的列

15.WHERE条件种,’’单引号用来限定字符串,将值与串类型进行比较需要限定引号,用来与数值列进行比较的值不用引号

16.WHERE条件中注意 ISNULL IS NOT NULL的限定情况(NULL与字段包含0,空格字符串或者仅仅包含空格是不同的 NULL代表无值)

17.AND和OR同时使用优先级的问题

要注意应该使用圆括号明确的分组操作符

比如 WHERE vend_id=1002 OR vend_id=1003AND prod_price>=10;

和   WHERE (vend_id=1002 OR vend_id=1003) AND prod_price>=10;

是不一样的,因为AND优先级比较高

1.     IN操作符与OR作用相同语法 IN(1002,1003,1004) NOT IN

优点:

清楚直观/计算次序容易管理 且 执行更快(相比于OR)/最大优点是IN可以包含其他SELECT语句(也就是子查询)

18.LIKE要和通配符配合使用,LIKE ‘jet%’    mysql根据配置是可以区分大小写的,如果区分的话,那么’jet%’将与 JetPack 1000不匹配

19.%通配符不能匹配NULL的,即WHERE prod_name LIKE ‘%’也不能匹配用值NULL作为产品名的行     _下划线总是匹配一个字符 不能多不能少

20.使用正则表达式进行匹配

SELECT * FROM tableName WHRER prod_nameREGEXP ‘.000’  . 点是正则表达式中的一个特殊字符,表示匹配任意一个字符,因此 1000和2000都是匹配且返回

21.LIKE和REGEXP区别

LIKE匹配整个列,如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行也不会返回(除非使用通配符

举例:

不使用通配符 什么也不返回

使用通配符

REGEXP在列值内进行匹配,匹配的文本在列值内出现,REGEXP将会找到他

22.匹配的时候区分大小写用BINARY

如:WHERE prod_name REGEXP BINARY ‘JetPack .000’

具体正则匹配用法参见书中或者网上查找

23.正则表达式的自测,可以不适用数据库表,通过返回 0(没有匹配) 1  (匹配)来测试。

例如:SELECT ‘hello’ REGEXP ‘[0-9]’  这个例子显然返回0(因为文本hello中没有数字)

24.拼接字段 Concat()比如Concat(vend_name,’ (’,vend_country,’)’);

25.常用字符串函数

Trim()   Lttim()  Rtrim()

Left() Right()

Length() Lower() Upper() SubString()

26.常用日期和时间处理函数

CurDate() CurTime() Now() 具体查看书籍

Datetime类型存储日期及时间值

条件查询中如果想要的是日期,那么请使用Date()

例如 WHERE Date(order_date) =‘2005-09-01’ 因为oreder_date使用的是datetime类型 年月日时分秒 Date()截取了当前日期的日期部分

如果想要检索2005年9月下的所有订单可以:

WHERE Year(order_date)=2005 AND Month(order_date)=9;

27.聚合函数




AVG() CONUT() SUM() MIN() MAX()

COUNT()关于NULL值,如果指定列名,那么该列为空的行将被忽略

如果用COUNT(*),那么NULL不忽略

AVG() MAX() MIN()函数忽略列值为NULL的行

28.分组函数

WHERE和HAVING区别:

29.子查询通常返回单个列并且与单个列匹配

30.表连结

INNER JOIN和WHERE等值连接(也成为内部连接)是相同的

31.自连接(用的比较少)

同一张表 用了两次

比如:

下面是子查询方案:


下面是自连接的方案:同一张表 用了两个别名

自连接有时候比子查询效能好 使用的时候两个要对比看

32.组合查询UNION

UNION中必须包含相同的列,表达式或聚集函数(不过各个列先后顺序无所谓);列数据类型必须兼容,类型不必完全相同,但必须是DBMS隐含地转换的类型(例如,不同的数值类型或者不同的日期类型)

33.UNION启动去除了重复的行,想要全部的可以用UNION ALL

UNION几乎总是完成与多个WHERE条件相同的工作

如果确实需要每个条件的匹配行全部出现(包括重复行),则必须使用UNION ALL而不是WHERE

UNION多个select后的ORDER BY是对所有的SELECT排序 而不仅仅是最后一个

34.18章以后内容不常用(属于扩展以及基础知识) 记录做在了书上

补充知识点:

DELETE不需要列名或者通配符,DELETE删除整行而不是整列,为了删除某个列的值,可以用UPDATE语句,(设置为NULL,如果表定义允许NULL值 不需要这个列直接DROP cloumn也是可以的)

例如:

UPDATE customers SET cust_email=NULLWHERE cust_id=10005;

DELETE的时候请务必先SELECT验证,保证它过滤的是正确的记录,并且加WHERE条件

如果想从表中删除所有行,可以使用TRUNCATE TABLE语句,TRUNCATE实际上是删除原来的表重新创建一张表,而不是逐行删除表中的数据

每个表只有一个自增的列,且必须被索引

猜你喜欢

转载自blog.csdn.net/Huangcsdnjava/article/details/80715019
今日推荐