mysql必知必会

1.LIMIT m OFFSET n

select * from student limit 3,5
SELECT prod_name FROM Products LIMIT 5 OFFSET 3;
LIMIT 5 OFFSET 3指示MySQL等DBMS返回从第4行起的5行数据。

2.按列位置排序
SELECT prod_id, prod_price, prod_name
FROM Products ORDER BY 2, 3;

3.SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符
SELECT prod_name, prod_price FROM Products
WHERE vend_id = ‘DLL01’ OR vend_id = ‘BRS01’
AND prod_price >= 10;

4.通配符%看起来像是可以匹配任何东西,但有个例外,这就是NULL。子句WHERE prod_name LIKE ‘%’不会匹配产品名称为NULL的行。

mysql必知必会
SELECT cust_name, cust_contact
FROM Customers
WHERE SOUNDEX(cust_contact) = SOUNDEX(‘Michael Green’);
SOUNDEX匹配所有发音类似于Michael Green的联系名

5.**应用程序一般不使用日期和时间的存储格式,因此日期和时间函数总是用来读取、统计和处理这些值。由于这个原因,日期和时间函数在SQL
中具有重要的作用。遗憾的是,它们很不一致,可移植性最差。**
SQL Server中检索2012年的所有订单
SELECT order_num
FROM Orders
WHERE DATEPART(yy, order_date) = 2012;
Oracle没有DATEPART()函数,不过有几个可用来完成相同检索的日期处理函数。
SELECT order_num
FROM Orders
WHERE to_number(to_char(order_date, ‘YYYY’)) = 2012;
to_char()函数用来提取日期的成分,to_number()用来将提取出的成分转换为数值,以便能与2012进行比较

MySQL具有各种日期处理函数,但没有DATEPART()。MySQL可使用名为YEAR()的函数从日期中提取年份:
SELECT order_num
FROM Orders
WHERE YEAR(order_date) = 2012;

6.数值处理函数仅处理数值数据。这些函数一般主要用于代数、三角或几何运算,因此不像字符串或日期-时间处理函数使用那么频繁。
具有讽刺意味的是,在主要DBMS的函数中,数值函数是最一致、最统一的函数
mysql必知必会

7.聚集函数
1)AVG(),MAX(),MIN(),SUM()函数忽略列值为NULL的行。
2)使用COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。

提示:多做实验
可以看到,执行任一给定的SQL操作一般不止一种方法。很少有绝对正确或绝对错误的方法。性能可能会受操作类型、所使用的DBMS、表
中数据量、是否存在索引或键等条件的影响。因此,有必要试验不同的选择机制,找出最适合具体情况的方法。

警告:Oracle中没有AS
Oracle不支持AS关键字。要在Oracle中使用别名,可以不用AS
8.使用带聚集函数的联结
SELECT Customers.cust_id,
COUNT(Orders.order_num) AS num_ord
FROM Customers INNER JOIN Orders
ON Customers.cust_id = Orders.cust_id
GROUP BY Customers.cust_id;