学习SQL【3】-查询基础

一:SELECT 语句基础

1:列的查询

基本的SELECT语句

SELECT <列名>,.....    
  FROM <表名>;


以下举例均是对表Product进行操作,表Product的结构内容如下图:

从表中输出三列:

SELECT product_id, product_name, purchase_price 
     FROM Product;

执行结果

product_id | product_name | purchase_price------------+--------------+----------------
 0001       | T衫          |            500
 0002       | 打孔器       |            320
 0003       | 运动T衫      |           2800
 0004       | 菜刀         |           2800
 0005       | 高压锅       |           5000
 0006       | 叉子         |
 0007       | 擦菜板       |            790
 0008       | 圆珠笔       |
(8 行记录)

查询结果中列的顺序与SELECT字句中的顺序相同。


2:查询出表中的所有列

想要查询全部列,可使用代表所有列的星号(*)

SELECT * 
     FROM Product;

查询结果如下:

product_id | product_name | product_type | sale_price | purchase_price | regist_date------------+--------------+--------------+------------+----------------+-------------
 0001       | T衫          | 衣服         |       1000 |            500 | 2017-09-20
 0002       | 打孔器       | 办公用品     |        500 |            320 | 2017-09-11
 0003       | 运动T衫      | 衣服         |       4000 |           2800 |
 0004       | 菜刀         | 厨房用具     |       3000 |           2800 | 2017-09-20
 0005       | 高压锅       | 厨房用具     |       6800 |           5000 | 2017-01-15
 0006       | 叉子         | 厨房用具     |        500 |                | 2017-09-20
 0007       | 擦菜板       | 厨房用具     |        880 |            790 | 2016-04-28
 0008       | 圆珠笔       | 办公用品     |        100 |                | 2017-11-11
(8 行记录)


3:为列设定别名

SQL语句可以使用AS关键字为列指定别名,

SELECT product_id          AS id,
               product_name    AS name,
               purchase_price   AS price   
   FROM Product;

执行结果

 id  |  name   | price------+---------+-------
 0001 | T衫     |   500
 0002 | 打孔器  |   320
 0003 | 运动T衫 |  2800
 0004 | 菜刀    |  2800
 0005 | 高压锅  |  5000
 0006 | 叉子    |
 0007 | 擦菜板  |   790
 0008 | 圆珠笔  |
(8 行记录)

别名可以使用中文,使用中文时需要用双引号(”)括起来:

SELECT product_id AS "商品编号",
               product_name AS "商品名称",
               purchase_price AS "进货单价"
     FROM Product;

执行结果如下:

商品编号 | 商品名称 | 进货单价----------+----------+----------
 0001     | T衫      |      500
 0002     | 打孔器   |      320
 0003     | 运动T衫  |     2800
 0004     | 菜刀     |     2800
 0005     | 高压锅   |     5000
 0006     | 叉子     |
 0007     | 擦菜板   |      790
 0008     | 圆珠笔   |
(8 行记录)


4:常数的查询

SELECT 子句中不仅可以书写列名,还可以书写常数
在SQL语句中使用字符串或者日期常数时,必须使用单引号(’)将其括起来:

SELECT '商品' AS string, 38 AS number, '2017-12-01' AS date,
               product_id, product_name   
     FROM Product;

执行结果如下:

string | number |    date    | product_id | product_name--------+--------+------------+------------+--------------
 商品   |     38 | 2017-12-01 | 0001       | T衫
 商品   |     38 | 2017-12-01 | 0002       | 打孔器
 商品   |     38 | 2017-12-01 | 0003       | 运动T衫
 商品   |     38 | 2017-12-01 | 0004       | 菜刀
 商品   |     38 | 2017-12-01 | 0005       | 高压锅
 商品   |     38 | 2017-12-01 | 0006       | 叉子
 商品   |     38 | 2017-12-01 | 0007       | 擦菜板
 商品   |     38 | 2017-12-01 | 0008       | 圆珠笔
(8 行记录)


5:从结果中删除重复行

若想要删除重复行,可以通过在SELECT 子句中使用DISTINCT关键字来实现:

SELECT DISTINCT product_type   
     FROM Product;

执行结果如下:

product_type--------------
 衣服
 办公用品
 厨房用具
(3 行记录)

在使用DISTINCT关键字时,NULL也被视为一类数据,如对含有NULL数据的purchase_price(进货单价)列使用DISTINCT关键字:

SELECT DISTINCT purchase_price     
     FROM Product;

执行结果如下:

purchase_price----------------

            320
            500
           5000
           2800
            790
(6 行记录)

注释:

DISTINCT关键字只能用于第一个列名之前。


6:根据WHERE语句来选择记录

SELECT语句通过WHERE子句来指定查询数据的条件
WHERE子句的语法:

SELECT <列名>,...     
     FROM <表名> 
   WHERE <条件表达式>;

例如,选取商品种类为“衣服”的记录

SELECT product_name, product_type    
      FROM Product   
  WHERE product_type = '衣服';

执行结果如下:

product_name | product_type--------------+--------------
 T衫          | 衣服
 运动T衫      | 衣服
(2 行记录)

注释:

● WHERE子句要紧跟在FROM子句后面。
● SQL中子句的书写顺序是固定的,不能随意更改。


7:注释的书写方法

注释是SQL语句中用来标志说明或注意事项的部分,分为1行注释和多行注释。
● 1行注释:
书写在”—“之后,只能写在同一行,在MySQL中,需要在”—“后加一个空格。

● 多行注释:
书写在”/“和”/“之间,可以跨多行。


二:算术运算符和比较运算符

1:算术运算符

SQL语句中使用算术运算符

SELECT product_name, sale_price, sale_price * 2 AS "sale_price_*2"
    FROM Product;

执行结果如下:

product_name | sale_price | sale_price_*2--------------+------------+---------------
 T衫          |       1000 |          2000
 打孔器       |        500 |          1000
 运动T衫      |       4000 |          8000
 菜刀         |       3000 |          6000
 高压锅       |       6800 |         13600
 叉子         |        500 |          1000
 擦菜板       |        880 |          1760
 圆珠笔       |        100 |           200
(8 行记录)

四则运算所使用的运算符(+、-、*、/)称为算术运算符。
SELECT 子句中可以使用常数或者算术表达式。


2:需要注意NULL

所有包含NULL的算术计算,结果都是NULL
如:

● 5 + NULL
● 1 * NULL
● NULL / 0

注释:

只有NULL除以0 时不会发生错误,并且结果仍然为NULL。


3:比较运算符

SQL中主要有六种比较运算符:

● = :相等
● <>:不相等
● >=:大于等于
● <= :小于等于
● > :大于
● < : 小于

例如,选取sale_price列为500的记录:

SELECT product_name, product_type     
      FROM Product  
  WHERE sale_price = 500;

执行结果:

product_name | product_type--------------+--------------
 打孔器       | 办公用品
 叉子         | 厨房用具
(2 行记录)

选取sale_price列的值不为500的记录:

SELECT product_name, product_type    
       FROM Product  
  WHERE sale_price <> 500;

执行结果:

product_name | product_type--------------+--------------
 T衫          | 衣服
 运动T衫      | 衣服
 菜刀         | 厨房用具
 高压锅       | 厨房用具
 擦菜板       | 厨房用具
 圆珠笔       | 办公用品
(6 行记录)

日期也可以用来比较

SELECT product_name, product_type, regist_date    
      FROM Product    
  WHERE regist_date < '2017-09-27';

执行结果:

product_name | product_type | regist_date--------------+--------------+-------------
 T衫          | 衣服         | 2017-09-20
 打孔器       | 办公用品     | 2017-09-11
 菜刀         | 厨房用具     | 2017-09-20
 高压锅       | 厨房用具     | 2017-01-15
 叉子         | 厨房用具     | 2017-09-20
 擦菜板       | 厨房用具     | 2016-04-28
(6 行记录)

WHERE字句中的条件表达式也可以使用计算表达式

SELECT product_name, sale_price, purchase_price    
      FROM Product    
  WHERE sale_price - purchase_price >= 500;

执行结果:

product_name | sale_price | purchase_price--------------+------------+----------------
 T衫          |       1000 |            500
 运动T衫      |       4000 |           2800
 高压锅       |       6800 |           5000
(3 行记录)


4:不能对NULL使用比较运算符

错误的SELECT语句

SELECT product_name, purchase_price    
     FROM Product  
  WHERE purchase_price = NULL;

执行结果:

product_name | purchase_price--------------+----------------(0 行记录)

SQL提供了专门用来判断是否为NULL的IS NULL运算符。
例如,选取NULL的语句:

SELECT product_name, purchase_price     
      FROM Product   
  WHERE purchase_price IS NULL;

执行结果:

product_name | purchase_price--------------+----------------
 叉子         |
 圆珠笔       |
(2 行记录)

反之,如果选取不是NULL的记录,需要使用IS NOT NULL运算符:

SELECT product_name, purchase_price     
      FROM Product  
  WHERE purchase_price IS NOT NULL;

执行结果:

product_name | purchase_price--------------+----------------
 T衫          |            500
 打孔器       |            320
 运动T衫      |           2800
 菜刀         |           2800
 高压锅       |           5000
 擦菜板       |            790
(6 行记录)


三:逻辑运算符

1:NOT运算符

NOT运算符表示否定,其不能单独使用,必须结合其他查询条件组合起来使用:

SELECT product_name, product_type, sale_price     
       FROM Product 
    WHERE NOT sale_price >= 1000;

执行结果:

product_name | product_type | sale_price--------------+--------------+------------
 打孔器       | 办公用品     |        500
 叉子         | 厨房用具     |        500
 擦菜板       | 厨房用具     |        880
 圆珠笔       | 办公用品     |        100
(4 行记录)

注释:

NOT运算符用来否定某一个条件,但是不能滥用。


2:AND运算符

AND运算符在其两侧的查询条件都成立时整个查询条件才成立。
例如,在WHERE子句中使用AND 运算符

SELECT product_name, purchase_price     
      FROM Product  
  WHERE product_type = '厨房用具' AND sale_price >= 3000;

执行结果:

product_name | purchase_price--------------+----------------
 菜刀         |           2800
 高压锅       |           5000
(2 行记录)


3:OR 运算符

AND运算符在其两侧的查询条件有一个成立时整个查询条件都成立。
例如,在WHERE子句中使用OR 运算符:

SELECT product_name, purchase_price     
       FROM Product  
  WHERE product_type = '厨房用具' OR sale_price >= 3000;

执行结果:

product_name | purchase_price--------------+----------------
 运动T衫      |           2800
 菜刀         |           2800
 高压锅       |           5000
 叉子         |
 擦菜板       |            790
(5 行记录)


4:通过括号强化处理

AND运算符的优先级高于OR运算符,想要先执行OR 运算符是可以使用括号。

SELECT product_name, product_type, regist_date   
        FROM Product  
  WHERE product_type = '办公用品'
        AND (    regist_date = '2017-09-11'
              OR regist_date = '2017-09-20');

执行结果:

product_name | product_type | regist_date--------------+--------------+-------------
 打孔器       | 办公用品     | 2017-09-11
(1 行记录)


5:逻辑运算符和真值

● NOT、AND和OR称为逻辑运算符。
● 使用AND 进行的逻辑运算称为逻辑积, 使用OR运算符进行的逻辑运算称为逻辑和。

SQL除了真假值外,还有第三种值—不确定(UNKNOW)。因此,只有SQL的逻辑运算称为三值逻辑,其他的通常的逻辑运算称为二值逻辑。


今天的学习到此结束。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会根据您的问题来为您解答SQL Server的基础学习中,如何创建登录用户、创建数据库用户以及分配权限的问题。 1. 创建登录用户 在SQL Server中创建登录用户需要使用以下语句: ``` CREATE LOGIN login_name WITH PASSWORD = 'password'; ``` 其中,`login_name`是您要创建的登录用户名,`password`是该用户的密码。 如果需要为该用户指定特定的数据库作为默认数据库,可以使用以下语句: ``` CREATE LOGIN login_name WITH PASSWORD = 'password', DEFAULT_DATABASE = database_name; ``` 其中,`database_name`是您要指定的数据库名称。 2. 创建数据库用户 在SQL Server中创建数据库用户需要使用以下语句: ``` USE database_name; CREATE USER user_name FOR LOGIN login_name; ``` 其中,`database_name`是您要创建用户的数据库名称,`user_name`是您要创建的数据库用户名,`login_name`是您刚刚创建的登录用户名。 如果需要为该用户指定特定的模式作为默认模式,可以使用以下语句: ``` USE database_name; CREATE USER user_name FOR LOGIN login_name WITH DEFAULT_SCHEMA = schema_name; ``` 其中,`schema_name`是您要指定的模式名称。 3. 分配权限 在SQL Server中分配权限需要使用以下语句: ``` USE database_name; GRANT permission_name TO user_name; ``` 其中,`database_name`是要分配权限的数据库名称,`permission_name`是要授予的权限名称,`user_name`是要授予权限的数据库用户名。 如果需要撤销该用户的权限,可以使用以下语句: ``` USE database_name; REVOKE permission_name FROM user_name; ``` 以上就是SQL Server中创建登录用户、创建数据库用户以及分配权限的基本操作方法。希望这些信息对您有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值