SQL 必知必会

 

主键(primary key)

  唯一标识表中每行的这个行称为主键。主键列中的值不允许修改或更新。

SQL:

  Structured Query Language,结构化查询语言。

  不区分大小写。为了便于阅读,SQL关键字大写,对所有列和表名小写。

  忽略空格,所以SQL可以分成很多行。

SELECT

  检索数据

SELECT prod_id, prod_name, prod_price
FROM Products;
--使用SELECT语句从表Products中选择数据,指定了3个列名,列名之间用逗号分隔。

输出:

prod_id    prod_name        prod_price
----------------------------------------------------    
BNBG01     Fish bean bag toy   3.4900 
...

FROM 关键字指出从其中检索数据的表名。

 

排序检索数据

子句(clause)通常由一个关键字和数据组成。

ORDER BY

顺序:应保证是SELECT语句中最后一条子句。

多个列排序:

先按其中两个列对结果进行排序,先价格,后名称。

SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price, prod_name;

按列位置排序:

SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY 23

降序排列:

ORDER BY prod_price DESC, prod_name; 

升序是默认的。

 

过滤数据

WHERE

SELECT prod_name, prod_price
FROM Products
WHERE prod_price = 3.49;

BETWEEN AND 组合

高级数据过滤

WHERE  a OR b AND c

有计算次序,a 或者 b+c

AND 比 OR 的计算次序优先级高。

 

IN

SELECT prod_name, prod_price
FROM Products
WHERE vend_id IN ('DLL01', 'BRS01')
ORDER BY prod_name;

IN 较OR的好处,直观,执行快,可以包含(SELECT语句)

not

WHERE NOT

MySQL 中的NOT没有这种用法。

 

用通配符进行过滤

  通配符(wildcard)、搜索模式(search pattern)

谓词:LIKE

SELECT prod_id, prod_name
FROM Products 
WHERE prod_name LIKE 'Fish%';

接受Fish 后的任意字符

搜索是区分大小写的 'fish%' 与Fish 将不匹配

下划线 (_) 通配符

类似填空题。。。 _ 总是匹配一个字符

方括号 ([] )通配符

  [] 用来指定一个字符集

SELECT cust_contact
FROM Customers
WHERE cust_contact LIKE '[JM]%'
ORDER BY cust_contact;

输出:

cust_contact
----------------
Jim Jones
John Smith
Michelle Green

[JM],单个字符,意为开头为J或M

[^JM],否定的意思

 

创建计算字段

  字段(field),基本上等于列(column),用在计算字段的连接上。

  

  拼接(concatenate),将值联结到一起构成单个值。

  Access、SQL Server、Sybase 使用+号

  DB2、Oracle、PostagreSQL、Sybase 使用||号

SELECT vend_name + '(' + vend_country + ')'
FROM Vendors
ORDER BY vend_name;
---------------------------
Bear Emporium         (USA  )

MySQL 中的拼接,不支持 + 或 || 的拼接,它使用CONCAT() 函数。

 

RTRIM(),格式化数据,去掉值右边的空格。

LTRIM(),去掉左边的空格

TRIM(), 去掉两边的空格

  SELECT RTTIM(vend_name) + '(' + RTRIM(vend_country) + ')'

  ...

 

AS,使用别名

例如:

SELECT RTRIM(vend_name) + '(' + RTRIM(vend_country)+')' AS vend_title

...

意为将 vend_name替换为vend_title

 

posted @ 2016-08-20 22:29  yhidr  阅读(191)  评论(0编辑  收藏  举报