设为首页 加入收藏

TOP

学习数据库笔记三(一)
2015-11-21 01:36:26 来源: 作者: 【 】 浏览:0
Tags:学习 数据库 笔记

select查询模型?

灰常重要!决定你能否写出强大的查询语句!

模型【列是变量(变量可以计算,所以列可以计算)

where后是表达式,值为真假,值为真时取出这行变量(列)的值】 (where id=3和id为3的进行比较,结果为真,就取id为3的行)

**所以SQL语句的执行过程分两步1.判断where后表达式的值,2.等于true时,取出列(变量)的值,否则不取出。

select * from user where 1; 这条语句按照模型来解释就很好理解了,表达式什么情况下都等于真,那就是整个表的行都等于真,取出*所有列,结果就是取出整张表的数据

select * from user where 0; 这条语句是不管什么情况都为假,那就根本没有符合条件的行数,所以一行内容也没有查出

现在来说说’变量(列)可以计算‘?

先来个简单的,假如查询明年的年龄

select uid,name,age+1 from user; 直接在age上加1

假如你的老板让你查询本店铺商品比市场价格便宜多少

select goods_id,goods_name,shop_price,market_price,market_price-shop_price from goods; 直接拿市场价格减去本店价格就可以了

只查某几列的术语叫“投影运算”,意为把这两列的值投影出来,你要取这两列的值可以说,把这哪几列做个投影。

把列看成变量,并拿两列做运算,这叫做“广意投影”。

SQL语句查询练习

1.查询出商品ID为32的商品

select goods_id,goods_name from goods where goods_id=32;

2.查询出不属于第3栏目的所有商品(栏目列名cat_id)

select cat_id,goods_id,goods_name from goods wher cat_id <> 3; 在SQL语句中<>和!=都是不等于的意思

3.查询出本店价格大于3000的商品

select shop_price,goods_id,goods_name from goods where shop_price >3000;

4.查询出本店价格低于或等于100元的商品

select shop_price,goods_id,goods_name from goods where shop_price <=100;

5.查询出栏目为4或11的所有商品,不许用or

不许用or就用||,或in

用|| select cat_id,goods_id,goods_name from goods where cat_id=4 || cat_id=11;

它出这题目的意思是考你会不会用in,所以用下面这样写法好

用in select cat_id,goods_id,goods_name from goods where cat_id in (4,11);

6.查询出价格大于100小于500的商品,不许用or

select shop_price,goods_id,goods_name from goods where shop_price between 100 and 500;

这种写法也可以

select shop_price,goods_id,goods_name from goods where (shop_price >=100) and (shop_price<=500);

7.查询出栏目id不等于3和栏目id不等于11的商品,用and和not in分别实现

select cat_id,goods_id,goods_name from goods where (cat_id<>3) and (cat_id<>11);

select cat_id,goods_id,goods_name from goods where cat_id not in (3,11);

8.查询出商品价格大于100小于500 或 大于4000小于5000的商品

select shop_price,goods_id,goods_name from goods where (shop_price between 100 and 500) or (shop_price between 4000 and 5000);

9.取出第3栏目下,价格小于1000或大于3000,并且点击量大于5的商品

这种情况把条件一一列出用and或or连接它们

select cat_id,shop_price,click_count,goods_name from goods where (cat_id=3) and (shop_price<1000 or shop_price>3000) and (click_count>5);

10.取出第一个栏目下的商品(第一个栏目通常是父结点,一般它下面是没有直接的商品的,而是放子栏目,所以在没有学子查询的情况下,要先看栏目表中,哪些属于栏目一,把这些栏目下的商品取出)

select cat_id,goods_id,goods_name from goods where cat_id in (2,3,4,5);

11.取出以‘诺基亚’开头的商品

select goods_id,goods_name from goods where goods_name like '诺基亚%'; 记不清的部分用%代替,它代表任意字符。

12.取出名字为‘诺基亚Nxx’的商品

select goods_id,goods_name from goods where goods_name like '诺基亚N__'; _代表一个字符

13.取出名字不以‘诺基亚’开头的商品

select goods_id,goods_name from goods where goods_name not like '诺基亚%';

14.取出第3个栏目下,价格大于1000小于3000,点击量大于5,名字以‘诺基亚’开头的商品*

select cat_id,shop_price,goods_name from goods where (cat_id=3) and (shop_price between 1000 and 3000) and (click_count >5) and (goods_name like '诺基亚%');

like模糊匹配

%匹配任意字符

_匹配单一字符

两道面试题

1.把num值处于[20,29]之间的数,改为20

把num值处于[30,39]之间的数,改为30

答update mian set num=floor(num/10)*10 where num between 20 and 39;

解题思路 首先where的范围在20~39,这是把20、30两个范围的数一起算,然后对这20~39的数进行num=floor(num/10)*10,先除以10,再向下取整,现在20多的都是2,30多的都是3,再乘以10就得到想要的结果了。

2.把goods表中商品名为‘诺基亚xxx’的商品改为‘HTCxxx’

这道题比较复杂,用到了函数

可以分步骤完成

a) select goods_name from goods where goods_name like '诺基亚___'; 先把‘诺基亚xxx’的数据查出来

+------------+
| 诺基亚e66 |
| 诺基亚n96 |
| 诺基亚n85 |
+------------+

b) select substring(goods_name,4) from goods where goods_name like '诺基亚___'; 用substring函数把前面诺基亚

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇腾讯游戏10大经典案例(一):唯一.. 下一篇工厂模式IDAL详解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: