2016.12.22:for SQL初学

本文介绍了SQL的基础知识,包括主键的作用、表头的设置方法、连接字段的使用、各种SQL函数如LEFT、RIGHT、SUBSTRING等的功能及应用,还详细讲解了排序、CASE语句、连接查询、子查询、UNION和INTERSECT的使用方法。

1.主键的两个原因:唯一地标识表中唯一地一行;表中该列针对每一行都拥有一个唯一值。

2.制作表头,直接量的使用: SELECT ‘FirstName:’ FirstName FROM Orders(First Name:表头空值)

3.SQL有连接字段:SELECT FirstName + ‘ ’ + LastName FROM Orders;MySQL用CONTACT函数:SELECTCONTACT(FirstName,LastName) FROM Orders

4.列的别名:SELECT FirstName + ‘ ’ + LastNameAS ‘First Name’ FROMOrders

5.标的别名:SELECT FirstName FROM Orders AS name

6.函数

  • LEFT (CharacterValue,NumberOfCharacters)

从指定的CharacterValue中,从左边开始查看NumberOfCharacters个字符

  • RIGHT (CharacterValue,NumberOfCharacters)

从指定的CharacterValue中,从右边开始查看NumberOfCharacters个字符

(ps. 字符经常在右边包含空格)

  • SUBSTRING (CharacterValue, StartingPosition,NumberOfCharacters)

从一个值中间选择数据

  • LTRIM()

删除左边空格,不会删除居中空格

  • RTRIM

删除右边空格,不会删除居中空格

  • GETDATE()

时间函数,返回当前的日期和时间

  • DATEPART (DatePart, DateValue)

DatePart:year, quarter, month, dayofyear,day, week, weekday, hour, minute, second

DateValue: 任意日期值

  • DATEIFF (DatePart, StartDate,EndDate)

StartDate和EndDate相差的DatePart数值

  • ROUND (NumericValue,DecimalPlaces)

NumericValue任意值。DecimalPlaces正数,将NumericValue四舍五入,保留DecimalPlaces个小数点;DecimalPlaces为零,没有小数部分;DecimalPlaces负数,对小数点左侧前DecimalPlaces位四舍五入。

(e.g. ROUND(712.863,-1)=710; ROUND(712.863,-2)=700)

  • RAND (seed)

可以无参数,返回值为(0,1)

  • CAST (Expression AS DataType)

转换函数。E.g. CAST(‘2009-04-110’ AS DATETIME)=2009-04-1100:00:00

  • ISNULL

判断为空。E.g. ISNULL(Color,’Unknown’);当color值为空时,返回Unknown(否则显示NULL)

7.排序 ORDER BY tablelist (ASC)。所有排序默认为升序,降序排序为DESC。ORDER BY可以使用表别名。

8.CASE在查询中的使用。

  • 简单表示如下:

SELECT CASE ColumnOrExpression WHEN value1 THENresult1 [ELSE DefaultResult] END

WHEN与THEN必须一一对应,[ELSE DefaultResult]不一定需要

  • 查询格式

CASE WHEN value1 THENresult1 [ELSE DefaultResult] END

(区别,前者:待计算的列名放在CASE之后;后者:待计算的列名放在WHEN之后)

9.SQL默认先处理AND操作符,再处理OR。

10.BETWEEN可以把带大于等于(>=)和小于等于(<=)操作符的一个AND表达式简化

e.g.  …WHERE Number>= 5 AND Number <=10相当于…WHERE Number BETWEEN 5 AND 10

11.IN操作符可以简化OR

e.g. …WHEREName= ‘AA’ AND Name =’BB’相当于…WHERE Name IN (‘AA’,’BB’)

12.判断为0,使用…=0;判断为空,使用… IS NULL

13.模糊匹配,LIKE函数;SQL提供了读音匹配函数:SOUNDEX

14.COUNT计数时,值为NULL并不计算在内

15.使用GROUP BY函数时,columnlist中的所有列要么是GROUP BY的子句列,要么是在聚合函数中使用的列。GROUP BY知识创建了组,ORDER BY则是按照顺序显示数据。

16.WHERE子句是对单独的行执行行查询条件,SQL提供了一个名为HAVING的关键字,对组级别实行查询。

17.SELECT语句的格式顺序

SELECT columnlist

FROM tablelist

WHERE condition

GROUP BYcolumnlist

HAVING condition

ORDER BYcolumnlist

18.内连接 INNER JOIN:内连接只会返回关联的两个表之间相匹配的数据,是所有匹配的数据。交换表列出的顺序,所得到的结果也是相同的。

e.g. SELECT* FROM Customers INNER JOIN Orders On Customers.CustomerID = Orders. CustomerID

内连接的主要限制是,要显示任何的结果,都要在所有连接的表中

19.外连接分为三种,左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)

左连接e.g.

SELECT

Customers.FirstName AS ‘First Name’

Customers.LastName AS ‘Last Name’

Orders.OrderDate AS ‘Order Date’

Orders.OrderAmount AS ‘Order Amt’

Refunds.RefundDate AS ‘Refund Date’

Refunds.RefundAmont AS ‘Refund Amt’

FROM Customers

LEFT JOIN Orders

ON Customers.customerID = Orders.CustomerID

LEFT JOIN Refunds

ONOrders.OrderID = Refunds.OrderID

对于关键字LEFTJOIN来说,左边表为主表,右边表为从表。结果显示主表需要的所有行,及时在从表中没有任何预与之匹配。

(ps. 右连接和左连接唯一不同的区别就是,表顺序不同。主表在RIGHT JOIN右边列出)。

20.全连接,两个表都是从表。如果表A和表B的行匹配,那么会显示:

1)表A中的所有行,即使它在表B中没有匹配行;

2)表B中的所有行,即使它在表A中没有匹配行;

区别于内连接:两个表都是主表,对于选中的行数据,在两个表之间必须有一个匹配。

21.自连接,处理那些本质上是自引用的表。这和外键的概念很相似,主要区别在于,外键是指向其他表的列,而自引用的列指向同一表中的行。

22.视图知识保存在数据库中的SELECT语句,它最大的优势,允许为数据库中已经存在的数据创建新的虚拟视图。

23.子查询分为关联的和非关联的。当子查询是非关联的,它完全独立于外围的查询语句。非关联查询作为整个SELECT语句的一部分,只会计算和执行一次。关联子查询是和外围的查询语句相关联的。由于这种显式关系,关联子查询需要针对返回的每一行逐行计算,并且可能在每次执行子查询的时候得到不同结果。

24.UNION的使用:允许我们在一条SELECT语句中检索不相关的或部分相关的数据

SelectStatementOneUNINO SelectStatementTwo ORDER BY columnlist

  • 使用UNION合并到一起的所有SELECT语句,在其SELECT columnlist中必须有相同数目的列
  •  每个SELECT columnlist中的所有列必须以相同的顺序排列
  • 每个SELECT columnlist中所有相对应的列,都必须有相同的或可兼容的类型

UNION vsUNION ALL:前者排除了所有重复的行,后者要求包含所有的行

25.INTERSECT:把两个集合中都能找到的数据提取出来;EXCEPT:在一个集合中存在而在另一个集合中不存在的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值