sql语句学习笔记一

建好下面的2各表,填上几条数据。


练习sql语句,由简单点的到复杂点的。

#在 Store_Information 表格中选出所有商店并去掉重复商店
SELECT DISTINCT store_name  FROM store_information
#在 Store_Information 表格中选出所有 Sales 高于 $1,000 或是 Sales 在 $500 及 $275 之间的商店
SELECT store_name FROM store_information WHERE sales > 1000 OR (sales < 500 AND sales >275) 
#在 Store_Information 表格中找出所有含盖 Los Angeles 或 San Diego 的
SELECT id,store_name FROM store_information WHERE id IN ('1','2')
#由 Store_Information 表格中找出所有介于 January 6, 1999 及 January 10, 1999 中的商店
SELECT store_name FROM store_information WHERE date BETWEEN '2014-10-02' AND '2014-12-03'
#所有含有 'an'这个模式的商店
SELECT store_name FROM store_information WHERE store_name LIKE '%an%'
#依照 Sales 栏位的由大往小列出 Store_Information 表格中的商店
SELECT store_name,sales FROM store_information ORDER BY sales DESC
#求和
SELECT SUM(sales) AS sum_sales FROM store_information
#数出表格中有几笔 store_name 栏不是空白的资料
SELECT COUNT(sales) AS count_sales FROM store_information WHERE store_name IS NOT NULL
#表格中有多少个不同的 store_name[COUNT 和 DISTINCT 经常被合起来使用,目的是找出表格中有多少笔不同的资料]
SELECT COUNT(DISTINCT store_name) AS dif_cou_distinct FROM store_information
#算出每一间店 (store_name) 的营业额 (sales)[在这个情况下,我们要做到两件事:第一,我们对于 store_name 及 Sales 这两个栏位都要选出。第二,我们需要确认所有的 sales 都要依照各个 store_name 来分开算。]
SELECT store_name,SUM(sales) AS sum_sales FROM store_information GROUP BY store_name
#找出 Sales 大于 $1,500 的 store_name[只需要知道哪些店的营业额有超过 $1,500。在这个情况下,我们不能使用 WHERE 的指令。用 HAVING 指令]
SELECT store_name,SUM(sales) AS sum_sales FROM store_information GROUP BY store_name HAVING SUM(sales) > 1500
#每一区 (region_name) 的营业额 (sales)[Geography 这个表格告诉我们每一区有哪些店,而 Store_Information 告诉我们每一个店的营业额。若我们要知道每一区的营业额,我们需要将这两个不同表格中的资料串联起来。当我们仔细了解这两个表格后,我们会发现它们可经由一个相同的栏位,store_name,连接起来。]
SELECT g.region_name,SUM(s.sales) AS sum_sales FROM geography g,store_information s WHERE g.store_name = s.store_name GROUP BY g.region_name
#每一间店的营业额[如果我们用一个普通的连接,我们将会漏失掉 'New York'这个店,因为它并不存在于 Store_Information 这个表格。]
SELECT g.store_name,SUM(s.sales) FROM geography g INNER JOIN store_information s WHERE g.store_name = s.store_name GROUP BY g.store_name
#将由不同栏位获得的资料串连在一起
SELECT CONCAT(region_name,store_name) AS combine FROM geography WHERE store_name = 'new_york'
#SUBSTR(str,pos): 由<str>中,选出所有从第<pos>位置开始的字符。
SELECT SUBSTR(store_name,3) FROM geography WHERE store_name = 'los_angeles'
#SUBSTR(str,pos,len): 由<str>中的第<pos>位置开始,选出接下去的<len>个字符。
SELECT SUBSTR(store_name,3,4) FROM geography WHERE store_name = 'los_angeles'
#TRIM 函数是用来移除掉一个字符串中的字头或字尾。最常见的用途是移除字首或字尾的空白。[LTRIM(字符串): 将所有字符串起头的空白移除。RTRIM(字符串): 将所有字符串结尾的空白移除。]
SELECT  store_name FROM store_information WHERE store_name = '   san_diego  '
SELECT  TRIM(store_name) FROM store_information WHERE store_name = '   san_diego  '
SELECT  LTRIM(store_name) FROM store_information WHERE store_name = '   san_diego  '
SELECT  RTRIM(store_name) FROM store_information WHERE store_name = '   san_diego  '
#从数据库表格中寻找资料也是同样的原理。如果一个表格没有索引的话,数据库系统就需要将整个表格的资料读出 (这个过程叫做'table scan')。若有适当的索引存在,数据库系统就可以先由这个索引去找出需要的资料是在表格的什么地方,然后直接去那些地方抓资料。这样子速度就快多了。    因此,在表格上建立索引是一件有利于系统效率的事。一个索引可以涵盖一或多个栏位。
CREATE INDEX ind_storename ON store_information(store_name)
#UNION 指令的目的是将两个 SQL 语句的结果合并起来,我们只会看到不同的资料值 (类似 SELECT DISTINCT)。
SELECT store_name FROM store_information UNION SELECT store_name FROM geography
#UNION 不同之处在于 UNION ALL 会将每一笔符合条件的资料都列出来,无论资料值有无重复。
SELECT store_name FROM store_information UNION ALL SELECT store_name FROM geography
#相关子查询[内部查询是要利用到外部查询到的表格中的栏位s.store_name]
SELECT store_name FROM store_information s WHERE s.store_name IN (SELECT store_name FROM geography g WHERE g.store_name = s.store_name)
#EXISTS 是用来测试内查询有没有产生任何结果。如果有的话,系统就会执行外查询中的 SQL。若是没有的话,那整个 SQL 语句就不会产生任何结果。
SELECT SUM(sales) AS sum_sales FROM store_information WHERE EXISTS(SELECT * FROM geography WHERE region_name = 'west')
#CASE 是 SQL 用来做为 if-then-else 之类逻辑的关键字。
SELECT store_name CASE store_name WHEN 'boston' THEN sales*2 WHEN 'san_francisco' THEN sales*0 ELSE sales END AS new_sales FROM store_information


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值