这个简单的学习笔记是我通过阅读《Sams Teach Yourself SQL in 10 minutes》这本书总结的。我采用的学习SQL的方法还是Learning by do it,在做完每一个实例之后,隔两天再总结总结,再隔两天在在其他语言的程序(比如C++,JAVA)中利用SQL进行调用数据来测试。
这里是第一部分,很多例子其实真的是很直观,很容易理解,所以我基本都没有写太多的解释。文中SQL命令关键词大小写不影响,但是建议采用大写。
学习的样表材料:www.forta.com/books/0672336073/
1.SELECT
1.1 检索
1.1.1 检索多列
SELECT prod_id, prod_name, prod_price
From Products;
1.1.2 检索所有列
SELECT *
From Products;
1.1.3 检索不同值
SELECT DISTINCT prod_name
From Products;
1.1.4 检索限制个数
SELECT prod_name
From Products
LIMIT 5;
OR if use in oracle:
SELECT prod_name
From Products
where ROWNUM <=5;
1.2 排序
1.2.1 排序单列
SELECT prod_name
From Products
order by prod_name;
1.2.2 排序多列
SELECT prod_id, prod_name, prod_price
From Products
order by prod_price, prod_name;
其中,prod_price是第一顺序,prod_name是第二顺序,第二顺序只在第一顺序作业下无法分出高下的时候起效。
1.2.3 排序顺序
默认是升序,如果想采用降序,需要对想降序的序列指定DESC:
SELECT prod_id, prod_name, prod_price
From Products
order by prod_price DESC, prod_name;
1.3 过滤
1.3.1 基础过滤
在数据库过滤比在客户端过滤好的得多,因为这样避免的通过网络发送多余的数据。过滤的字句为:
where prod_price < 10; --过滤单值
where prod_price != 10; --排除单值
where prod_price between 10 AND 100; 范围过滤
where prod_price IS NULL; --空值检查
1.3.2 高级过滤
where prod_price < 10 AND vend_id = 'DLL01'; --AND
where prod_price < 10 OR vend_id = 'DLL01'; --OR
where vend_id in ('DLL01', 'BRS01'); --range
where NOT vend_id = 'DLL01'; --否定其后条件
1.3.3 使用通配符过滤
Concept: wildcard, 通配符, 是用来匹配一部分的特殊字符
A.使用百分号%过滤
a.匹配所有“FISHXXXXX”字串
SELECT prod_name
From Products
where prod_name LIKE 'FISH%';
b.匹配所有“XXXFISHXXXXX”字串
SELECT prod_name
From Products
where prod_name LIKE '%FISH%';
c.匹配所有“F"开头,"Y”结尾的字串
SELECT prod_name
From Products
where prod_name LIKE 'F%Y';
B.使用下划线_过滤
只匹配单个字符
sqlite> select prod_id, prod_name
...> from Products
...> where prod_name LIKE '_ inch teddy bear';
C.使用方括号[]过滤
指定一个字符集,必须匹配特定位置的单个字符。比如打算查找客户中以J或者K开头的联系人:
sqlite> select cust_contact
...> from Customers
...> where cust_contact LIKE '[JK]%'
...> ORDER by cust_contact;
不过在SQLite中貌似无用。
2. 计算&字段
2.1 拼接字段
在SQLite, Oracle, DB2中,使用
select vend_name || '(' || vend_country || ')'
from Vendors;
Results:
Bears R Us(USA)
Bear Emporium(USA)
Doll House Inc.(USA)
Furball Inc.(USA)
Fun and Games(England)
Jouets et ours(France)
如果使用的是SQL Server,第一句应当用:
select vend_name + '(' + vend_country + ')'
如果使用的是MySQL,第一句应当用:
select Concat(vend_name, '(', vend_country, ')')
为了保证返回有期望的格式,应当消除多余空格
select RTRIM(vend_name) || '(' || RTRIM(vend_country) || ')'
from Vendors;
2.2 执行计算
Code:
SELECT prod_id, quantity, item_price, quantity*item_price AS subtotal
FROM OrderItems
WHERE order_num = 20008;
输出:
RGAN01 |5 |4.99 |24.95
BR03 |5 |11.99|59.95
BNBG01 |10|3.49 |34.9
BNBG02 |10|3.49 |34.9
BNBG03 |10|3.49 |34.9