数据库回顾总结

数据库
1.SQL:结构化查询语言
  MYSQL:是基于客户机和服务机的数据库;

2.MYSQL工具:
mysql命令行使用程序;
MySQL Administrator
MySQL QueryBrowser

3.使用MySQL:
show databases显示所有可用的数据库;
用USE选择一个数据库;
show tables显示数据库里的所有的表;
show columns from table_name显示表里面的列;

4.SQL是不区分大小写的;

5.distinct关键字只返回不同的值,必须直接放在列名前面且不能部分使用;
  select distinct city_name from city;

6.limit限制返回的结果的行数;
Select * from city
Limit 5,4;
表示返回从第五行开始四行数据;

7.order by排序:
Order by子句中使用的列可以是非显示的列;
给多个列排列时,按照列名的顺序,按照第一个列名排序,然后在相同的列名数据中按照第二个列名排序;
默认为升序,降序DESC,升序ASC;
使用order by 和limit的组合,可以找出列中最高或者最低的值,先排序,再输出几行数据,所以先order by,再 limit;
使用order by 和where的组合,应该让order by位于where之后,对挑选出来的数据进行排序才符合常理。

8.SQL过滤和应用软件过滤
虽然数据可以在SQL和客户机进行过滤,但在客户机过滤明显浪费流量,增加了应用软件的复杂性,增加了响应时间,所以数据过滤应尽可能在SQL完成;

9.在使用where子句时,对于字符串要用单引号括起来,数值列则不用;
Where price between 5 and 8;
Where name is null;
Null是一个具有特殊类型的值,在过滤时要特意指出来;

10.任何时候使用and和or的条件组合子句时,都要用括号括出正确的计算顺序,虽然默认是and先再or;

11.In where 子句功能与or相似,但它的效率比or高;
Where price in(5,7)==where price =5 or price =7;
用圆括号括出想要的值;
IN的最大优点是可以包含其他select语句。

12.使用通配符进行过滤
LIKE操作符与通配符‘%’(可以匹配多个字符)和‘_’(只能匹配单个字符)
Where name like  ‘jet%’;(搜索词是区分大小写的)
通配符的搜索花费时间比较长,刻意替代时不要过度使用。
通配符不能用来匹配null值。

13.正则表达式:(用来匹配文本的特殊的字符集合)
用正则表达式模板也是网站检查用户输入数据格式常用方式;
Regexp 匹配不区分大小写,regexp binary 区分大小写;
Where name regexp ‘an’;(返回所有包含an的值);
Where name regexp ‘a|b|c’;(返回所有包含a或者b或者c的值);
Where name regexp’[123] Tom’(返回123其中某个与TOM的值,匹配123其中之一)
Where name regexp’[^123] Tom’(除123之外的值)
Regexp[1-9][a-z]匹配从1到9或者a到z的值;
Regexp’.’匹配任意字符;
Regexp’\\.’匹配’.’字符,特殊字符要用\\标出来。\\f换页\\n换行\\\匹配反斜杠本身……
匹配自定义的字符类!!!预定义的字符集
[:digit:]匹配任意字符。
[]表示集合;
{n}指定数目的匹配;
?匹配前一个字符出现0次或者1次;
+匹配前一个字符至少出现1次;
*匹配前一个字符出现任意次;
^在集合中表否定,否则表示字符串的开头;
$表示字符串的结尾;
不需要注意通配词的位置,正则表达式可能内部调用了模板,所以性能会比较低;
正则式匹配是个很多样化的使用

14.我们需要直接从数据库中检索出转换,计算或者格式化过的数据,而不是检索出数据,然后再在客户机应用程序中重新格式化;在数据库服务器上完成这些操作比在客户机中完成要快得多,因为DBMS就是设计来快速有效地完成这种处理的;

15.创建新的字段
多数DBMS使用+或者||实现拼接,MySQL使用Concat()函数来实现,将多个串连接起来形成一个较长的串,各个串之间用逗号分隔。
Select concat(name,’(‘,ID,’)’)
RTrim()和LTrim()函数去除右边或者左边的空格;
使用别名:A AS B
对于数值类的列合并直接在用加减乘除;

15.日期和时间处理函数
Where Date(date)=’2015-10-19’;
Where Time(time)=’12:03:10’;
最好用这两个函数来判断日期或者时间;

16.AVG()求平均值的函数
如果有where子句则只是求where子句挑选出来的值的平均值;
忽略NULL值;

17.count()计数函数
Count(*)计算表中所有行的数目;
Count(列名)计算该列的行数,忽略NULL值;

18.分组数据,group by (分组)和having(过滤分组)
先group by分组再对分组后的数据使用聚集函数,所以group by子句中不能出现聚集函数;
Group by 在where后面出现,where过滤出行,先选择出数据再进行分组,再用having过滤分组;
NULL值作为一个分组出现;
Group by 子句中出现的列必须是检索列或有效的表达式;
分组后要记得排序,group by应该和order by一起用,先分组后排序,order by应该在group by之后。

19.子查询的两种用法:
1)利用子查询进行过滤;
2)子查询的结果作为列;

20.通过在表的定义中指定主键和外键,可以维护引用完整性,即假如在产品表中设供应商表的主键为外键,那么产品表中供应商那一列的值必须在供应商表中出现。

21.在联结两个表时,实际上是将第一个表的每一行和第二个表的每一行都进行配对,即得到两个表的笛卡儿积,然后在用where子句把符合条件的数据过滤出来。

22.表可以用AS取别名,但是表别名只在查询执行中使用,与列别名不一样,表别名不返回到客户机中。

23.三种联结方式:
1)等值联结/内联结:常用的联结类型,先得出笛卡儿积,然后选择满足条件的行;
(where A.a=B.a)(from A inner join B on A.a=B.a)
2)自然联结:要求两个表有相同的列,而在返回的结果中会去掉重复的列;(natural join)
SELECT *
FROM authors NATURAL JOIN publishers
3)外联结:结果中返回所有的行,尽管有些行不满足条件;
(from A outer join B on A.a=B.a)
左外联结,让左边的表保留所有行,右外联结让右边的表保留所有行
(from A left outer join B on A.a=B.a ||from A right outer join B on A.a=B.a)

24.UNION union 组合查询,起到类似where的效果
将多个选择语句的结果合并成一个集合,所以每个选择语句必须是相同的检索列;
Union默认删除重复行,有需要可以用 union all 显示所有行;
Union 在两个select语句中间,order by子句只出现一次,在最后,对所有的结果进行排序;

25.MySQL的内部引擎,用来管理和处理数据:
InnoDB:是一个可靠的事务处理引擎,但不支持全文本搜索;
MEMORY:功能上等同于MyISAM,但数据存储在内存中,速度快,但使用与临时表;
MyISAM:不支持事务处理,但是支持全文本搜索;

26.对于表的修改,一般是用来定义外键
Alter table orderitems
Add constraint fk_orderitems_orders
Foreign key (order_num) references orders(order_num);

Drop column删除列

27.视图
视图是一个虚拟的表,是对SQL语句的封装。
Create view name as...(查询语句)
然后用这个视图来代替复杂的查询语句;
虽然对视图的操作跟对表的操作基本没有差别,可以用来嵌套联结之类的,
但是视图不是真实存在的,对视图的调用其实是对视图下定义的SQL的调用,所以当多个视图嵌套之类使用时会使性能下降;
Show create view name;用来显示定义视图的SQL语句;

猜你喜欢

转载自mili-qm.iteye.com/blog/2285948