主键(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 2,3;
降序排列:
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