混吃等死的猪
I believe, I can.

1简单查询

mysql> SELECT CITY,TARGET,SALES FROM OFFICES WHERE REGION='Eastern';

 

 

ORACLE和DB2遇到NULL值时什么也不显示

2计算查询

mysql> SELECT CITY,REGION,(SALES-TARGET) FROM OFFICES;
mysql
> SELECT NAME,MONTH(HIRE_DATE),YEAR(HIRE_DATE) FROM SALESREPS;
mysql
> SELECT CITY,'HAS SALES OF ',SALES FROM OFFICES;

 


SQL常量可以被其自身用做选择列表的项
-------------+---------------+-----------+
| CITY        | HAS SALES OF  | SALES     |
+-------------+---------------+-----------+
| Denver      | HAS SALES OF  | 186042.00 |
| New York    | HAS SALES OF  | 692637.00 |
| Chicage     | HAS SALES OF  | 735042.00 |
| Atlanta     | HAS SALES OF  | 367911.00 |
| Los Angeles | HAS SALES OF  | 835915.00 |
+-------------+---------------+-----------+15UNION和排序


3选择所有的字段

SELECT ×

 


4重复的记录

mysql> SELECT DISTINCT MGR FROM OFFICES;

 


5选择记录

mysql> SELECT NAME,SALES FROM SALESREPS WHERE MANAGER=104;
mysql
> SELECT NAME,SALES,QUOTA FROM SALESREPS WHERE EMPL_NUM=105;
mysql
> SELECT CITY,SALES,TARGET FROM OFFICES WHERE SALES>TARGET;

 


6比较测试

mysql> SELECT NAME FROM SALESREPS WHERE HIRE_DATE<'2006-01-01';
mysql
> SELECT CITY,MGR FROM OFFICES WHERE MGR<>108;
mysql
> SELECT CITY,MGR FROM OFFICES WHERE MGR!=108;

 


其中<>也可以写作!=。


7范围测试

mysql> SELECT ORDER_NUM,ORDER_DATE,PRODUCT,AMOUNT FROM ORDERS WHERE ORDER_DATE BETWEEN '2007-10-01'AND '2007-12-31';

 


范围测试包括范围的端点。包括10月1日和12月31日。
A BETWEEN B AND C=(A>=B)AND(A<=C)。否定形式NOT BETWEEN。


8组成员测试

mysql> SELECT NAME,QUOTA,SALES FROM SALESREPS WHERE REP_OFFICE IN(11,13,22);

 


9模式匹配测试


百分号%通配符字符匹配任何顺序的0个或多个字符

mysql> SELECT COMPANY,CREDIT_LIMIT FROM CUSTOMERS WHERE COMPANY like 'Smith% Corp.';

 


下划线_通配符字符匹配任何单个字符

mysql> SELECT COMPANY,CREDIT_LIMIT FROM CUSTOMERS WHERE COMPANY LIKE 'Smiths_n Corp.';

 


like测试必须应用到具有字符串数据类型的字段
转意字符

mysql> SELECT ORDER_NUM,PRODUCT FROM ORDERS WHERE PRODUCT LIKE 'A$%BC%' ESCAPE '$';

 


以上是用$来做转意字符的,也可以用不同的字符来做转意字符。


10NULL值测试

mysql> SELECT NAME FROM SALESREPS WHERE REP_OFFICE IS NOT NULL;

 


这里不能用REP_OFFICE=NULL;因为NULL不是一个真正的值而是一个符号,表示值是未知的,所以不能用=来匹配。


11复合搜索条件

mysql> SELECT NAME,QUOTA,SALES FROM SALESREPS WHERE SALES<QUOTA AND SALES<300000;
mysql
> SELECT NAME,QUOTA,SALES FROM SALESREPS WHERE SALES<QUOTA AND NOT SALES<15000;

 


12排序查询结果


默认情况下排序为升序ASC,降序位DESC。

mysql> SELECT CITY,REGION,(SALES-TARGET) FROM OFFICES ORDER BY REGION ASC,3 DESC;

 

(不建议)
这里的3也可以用(SALES-TARGET)代替。


13组合查询结果


列出产品价格超过2000美元或在一个订单中订购了超过30000美元产品的所有产品。

mysql> SELECT MFR_ID,PRODUCT_ID FROM PRODUCTS WHERE PRICE>2000.00 UNION SELECT DISTINCT MFR,PRODUCT FROM ORDERS WHERE AMOUNT>30000.00;

 


注意三点:1,两个SELECT子句必须包含同样数目的字段
    2,第一个表中的数据类型必须与第二个表中对应字段的数据类型相同
    3,两个表都不能用ORDER BY子句排序,但组合后的查询结果可以排序。


14UNION和重复记录


UNION 默认是消除重复的,UNION ALL保留重复记录

mysql> SELECT MFR_ID,PRODUCT_ID FROM PRODUCTS WHERE PRICE>2000.00 UNION ALL SELECT DISTINCT MFR,PRODUCT FROM ORDERS WHERE AMOUNT>30000.00;

 


15UNION和排序

 

mysql> SELECT MFR_ID,PRODUCT_ID FROM PRODUCTS WHERE PRICE>2000.00 UNION SELECT DISTINCT MFR,PRODUCT FROM ORDERS WHERE AMOUNT>30000.00 ORDER BY 1,2;

 

 

posted on 2010-11-22 00:44  混吃等死的猪  阅读(329)  评论(0编辑  收藏  举报