SQL 知识总结(一)

来源:互联网 发布:住友酒店集团会员 知乎 编辑:程序博客网 时间:2024/05/02 02:17

最近一段时间,翻阅了《SQL学习指南》这本书,发现了一些值得记下的使用技巧和容易忽视的知识点


一·关于查询:

1.1·可以通过在SELECT后面加上DISTINCT来去除结果集中重复的行。默认的SELECT后面适用的是ALL关键字。

1.2·对于DISTINCT的使用,执行时会先对结果集进行排序,比较耗时。所以不必要的时候应该减少使用。

1.3·表分为三类:永久表、临时表、虚拟表(视图)。可以通过CREATE VIEW EMP_VW AS SELECT * FROM EMPLOYEE_来创建名为EMP_VW 的视图。

1.4·使用虚拟表:SELECT * FROM EMP_VW 。

1.5·ORDER BY 1  表明使用返回结果的第一列进行排序。


二·关于过滤:

2.1·所有的SQL,除了INSERT外,都可以使用WHERE进行数据过滤。

2.2·BETWEEN......AND...... 对字符串进行排序,实际是按照字符串在所使用字符集内顺序进行排序的。

2.3·REGEXP 在MYSQL中,可以使用该关键字来通过正则表达式对数据进行验证。Oracle中格式为REGEXP_LIKE  。SQL Server中,可以直接写在LIKE关键字后面。

2.4·两个NULL,不能进行相等的判断。如果数据中存在NULL是,通过  列名 != 值  的形式,不能取到值为NULL的数据。


三·多表查询:

3.1·交叉查询 CROSS JOIN (取得笛卡尔积)。

3.2·内连接 INNER JOIN ,对于内连接连接的两个表,只有两张表中通过连接条件的数据行,才能够查询出来。

3.3·关于SQL的连接顺序:SQL是一种非过程化语言,对于FROM自己中级联的各个表,SQL会根据表内数据行的数量自动进行重新排序,可以通过关键字指定级联的先后顺序。

3.4·自连接 对于表自身进行连接。例如 地区级联,通过地区的PARENT_ID_,级联他自身的主键ID_ 。


四·使用集合:

4.1·UNION和UNION ALL操作。UNION操作会去除重复的行,而UNION ALL则不会去除重复的行。

4.2·INTERECT和INTERECT ALL操作。取交集(去重,不去重)。

4.3·EXCEPT 和 EXCEPT ALL 操作。集合差(去重,不去重)。

4.4·使用UNION时,如果需要排序,只能对UNION中第一个表中字段名进行排序。所以,不要将两张表的列名写成一样的。

4.5·复合查询的顺序是自顶向下进行的,其中INTERECT的优先级最高。


五·数据转换以及生成:

5.1·当存入数据库中的字符串超过我们设定的长度时,数据库会有以下两种处理方式:

一、添加到数据库,对字符串进行截串操作,并提示警告信息。(ANSI)

二、抛异常。(STRICT)

对于处理的模式,我们可以通过 SELECT @@session.sql_mode;来进行查询。我们还可以通过 SET SQL_MODE = 'ANSI'; 来设定SQL模式。

5.2·在查询语句中使用char()函数可以取得字符对应的ASCII码,通过ASCII()函数可以通过ASCII码取得对应字符。

5.3·Mysql中使用CONCAT('exp1','exp2','exp3'....)来进行字符串的连接。

5.4·length(colunmName) 。 在length(col)函数中放入列的字段名,可以返回该列的字符串长度。对于MySQL,Oracle中,char类型的列中存放的字符串,只用空格填充向右补齐,但在获取数据的时候,会自动删除掉尾端的空格。

5.5·position('character' IN vchar_fld).找出字符串character在vchar_fld中的位置,若找不到,则返回0 。

原创粉丝点击