主键满足以下条件:
任何两行不能有相同主键。每一行都必须有一个主键值(主键值不允许NULL列)。主键列中的值不允许修改或更新。主键值不能重用(如果某行被删除,他的主键不能赋给以后的新行)。SQL 是结构化查询语言的英文缩写。
所有表都应该有主键,这个表应该用prod_id作为其主键。
用途:从一个或多个表中检索信息。
检索单个列。 SELECT prod_name FROM Products; 上述语句利用 SELECT 语句 从 Products 表中检索一个名为prod_name的列。所需的列名写在 SELECT 关键字之后。FROM 关键字指出从哪个表中检索数据。*
如果没有明确的排序查询结果,则返回的数据没有特定的顺序。
SQL 关键字不区分大小写。检索多个列。 SELECT prod_id, prod_name, prod_price from Products;
SQL 语句一般返回原始的、无格式的数据。数据的格式化是表示问题,> 而不是检索问题。
检索所有列。 SELECT * FROM Products;
通配符 * 表示返回表中所有列。一般使用 * 会降低检索和应用程序的性> 能。
DISTINCT 关键字 SELECT vend_id FROM Products; 假如以上代码返回的结果如下:
vend_idBRS01BRS01BRS01DLL01DLL01DLL01DLL01FNG01FNG01使用DISTINCT关键字 SELECT DISTINCT vend_id FROM Products; 输出:
vend_idBRS01DLL01FNG01 限制结果 SELECT prod_name FROM Products LIMIT 4 OFFSET 3 返回第 3 行起的 4 行数据,如果最后不足 5 行则返回到结尾为止。第一个被检索的行是第 0 行,而不是第一行。上述语句在 mysql 中可被简化为 SELECT prod_name FROM Products LIMIT 3, 4注释SELECT prod_name --这是一条注释 FROM Products;
/*这也是 注释*/ SELECT prod_name FROM Products;
将检索结果按 prod_name 的顺序排列。
ORDER BY 应保证在 SELECT 语句中最后出现,否则会出现错误消息。
ORDER BY 的列不一定要是被显示的列。
多重排序 SELECT prod_id, prod_price, prod_name from Products ORDER BY prod_price, prod_name先按 prod_price 排, 再按 prod_name 排。
多重排序简写 SELECT prod_id, prod_price, prod_name from Products ORDER BY 2, 3按 SELECT 返回的第 2、3行排列。注意:当根据不出现在 SELECT 清单中的列进行排序时,不能采用这项技术。
指定排序方向 SELECT prod_name from Products ORDER BY prod_price DESC, prod_name ASC --ASC可以不写ASC 与 DESC 相对,ASC为默认顺序。返回 Products 表中 prod_price 值为 3.49 的 prod_name, prod_price 列。
先写 WHERE 子句,再写 ORDER BY 子句。
操作符说明=等于<>不等于!< 和 !=不小于!>不大于BETWEEN在指定的两个值之间IS NULL为 NULL 值其他逻辑符号的和C语言一样
检查单个值 SELECT prod_name, prod_price FROM Products WHERE prod_price < 10不匹配检查 SELECT vend_id, prod_name FROM Products WHERE vend_id <> 'DLL01' 单引号来限定字符串。范围值检查 SELECT prod_name, prod_price FROM Products WHERE prod_price BETWEEN 5 AND 10 返回 prod_price 在 5 和 10 之间的 prod_name, prod_price。
不同的数据库对 BETWEEN…AND 操作符的处理方式是有差异的。某些数据库会列出介于 5和 10 之间的数据,但不包括 5 和 10 ;某些数据库会列出介于 5 和 10 之间并包括 5 和 10 的人;而另一些数据库会列出介于 5 和 10 之间的人,包括 5 ,但不包括 10 。 所以,请检查你的数据库是如何处理 BETWEEN….AND 操作符的!
空值检查 SELECT prod_name FROM Products WHERE prod_price IS NULL
NULL 表示无值,它与字段包含0、空字符串或仅仅包含空格不同。 判断 空值 应用 IS NULL 子句。
通过过滤选择不包含指定值的所有行时,不会返回含 NULL 的行。因为未知有特殊的含义,数据库不知道他们是否匹配。
AND 操作符 SELECT prod_id, prod_price, prod_name FROM Products WHERE vend_id = 'DLL01' AND prod_price <= 4
OR 操作符 和 AND 操作符用法一样。
IN 操作符 SELECT prod_name, prod_price FROM Products WHERE vend_id IN ('DLL01', 'BRS01') 上述语句的作用和下面是一样的 SELECT prod_name, prod_price FROM Products WHERE vend_id = 'DLL01' OR vend_id = 'BRS01' IN 一般比 OR 执行得更快优先级 并不是简单的从左到右执行,AND 的优先级高于 OR,默认先执行 AND(即使 OR 在前面),如果要先执行 OR,就要加括号。
NOT 操作符 否定跟在其后的条件。
SELEVCT prod_name FROM Products WHERE NOT vend_id = 'DLL01' ORDER BY prod_name 等价于 SELEVCT prod_name FROM Products WHERE vend_id <> 'DLL01' ORDER BY prod_name
下划线(_)通配符
只匹配一个字符,其他用法和 % 一样。方括号([ ])通配符
用于指定一个字符集,必须匹配指定位置的一个字符。 SELECT cust_contact FROM Customers Where cust_contact LIKE '[JM]%' ORDER BY cust_contact 上述 SQL 语句匹配了 J 或 M 开头的值。使用 SQL 一般比前面讨论的其他搜索付要耗费更长的时间。 能使用其他操作符代替时,尽量不要使用操作符。确实需要使用通配符时,也不要放在搜索模式的开始处。置于开始处搜索是很慢的。仔细注意通配符的位置看有没有放错。