SQL基础(一)

写在前面

这篇文章主要以MySQL数据库进行讲解
在阅读本文之前假设已经安装MySQL数据库。请先构建好数据源,如果没有安装MYSQL数据库可以通过下面的在线网站构建数据源并练习SQL语句
SQL在线练习网站:http://sqlfiddle.com/
源数据下载:https://forta.com/wp-content/uploads/books/0672327120/mysql_scripts.zip


SQL语言分类

SQL语言主要分为三类:

  • DML(Data Manipulation Language):数据操作语言,常用的增删改查就属于DML,操作的对象是数据表中的对象。
  • DDL(Data Definition Language):数据定义语言。建表,建立数据库就属于DDL
  • DCL(Data Control Language):数据控制语言,提交回滚,数据库安全管理等属于DCL

本文将逐一介绍这三个SQL语言分类的简单讲解。

检索数据

SELECT语句

#建products表并插入数据
CREATE TABLE products
(
  prod_id    char(10)      NOT NULL,
  vend_id    int           NOT NULL ,
  prod_name  char(255)     NOT NULL ,
  prod_price decimal(8,2)  NOT NULL ,
  prod_desc  text          NULL ,
  PRIMARY KEY(prod_id)
) ENGINE=InnoDB;
INSERT INTO products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('ANV01', 1001, '.5 ton anvil', 5.99, '.5 ton anvil, black, complete with handy hook');
INSERT INTO products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('ANV02', 1001, '1 ton anvil', 9.99, '1 ton anvil, black, complete with handy hook and carrying case');
INSERT INTO products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('OL1', 1002, 'Oil can', 8.99, 'Oil can, red');
INSERT INTO products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('FU1', 1002, 'Fuses', 3.42, '1 dozen, extra long');

检索单个列

语法:SELECT 列名 FROM 表名

检索prod_name列

SELECT prod_name FROM products;
#结果为
|    prod_name |
|--------------|
| .5 ton anvil |
|  1 ton anvil |
|        Fuses |
|      Oil can |
  • 上面的语句利用SELECT语句从products表中检索一个列为prod_name。所需列名在SELECT关键字后面给出,FROM关键字指定要从哪个表检索数据

检索多个列

语法:SELECT 列名1,列名2... FROM 表名

  • 要从一个表中检索多个列,使用SELECT语句,后面键入多个列名,列名之间必须以逗号隔开

当心逗号:在选择多个列时,一定要在列名之间加逗号,最后一个列名之后不用加

还是以上面的数据源为例,检索prod_id、prod_name两列

SELECT prod_id,prod_name FROM products;
#其结果如下:
| prod_id |    prod_name |
|---------|--------------|
|   ANV01 | .5 ton anvil |
|   ANV02 |  1 ton anvil |
|     FU1 |        Fuses |
|     OL1 |      Oil can |

检索所有列

语法:SELECT * FROM 表名

  • 检索所有列时,给定一个通配符(*),则会检索表中的所有列。
SELECT * FROM products;
prod_id | vend_id | prod_name  | prod_price  | prod_desc
  ANV01	|  1001	  | .5 ton anvil |  5.99	| .5 ton anvil, black
  ANV02	|  1001	  | 1 ton anvil |  9.99	    | 1 ton anvil, black

检索不同的行(DISTINCT)

语法:SELECT DISTINCT 列名 FROM 表名

要检索出有不同值的列表,使用DISTINCT关键字,此关键字必须直接放在列名的前面。此关键字指示MySQL只返回不同的值,这里的DISTINCT不能部分使用,它应用于所有列而不仅是前置它的列。

SELECT DISTINCT vend_id FROM products;
| vend_id |
|---------|
|    1001 |
|    1002 |

限制结果(LIMIT)

限制返回的行数。可以有两个参数,第一个参数为起始行,从 0 开始;第二个参数为返回的总行数。

语法:

SELECT 列名1,列名2,... 
FROM 表名
LIMIT starts,count;
  • count:检索取多少行

  • starts:从第几行开始,注意这里的开始行从0开始

返回前五行:

SELECT * FROM products LIMIT 5;
SELECT * FROM products LIMIT 0,5

带一个值的LIMIT总是从第一行开始,给出的数为返回的行数。带两个值的LIMIT可以指定从行号为第一个值的位置开始。

过滤数据

使用WHERE子句

在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名后给出。在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后

WHERE子句操作符

语法:

SELECT 列名1,列名2,... 
FROM 表名
WHERE 条件 

MYSQL支持以下所有条件操作符:

操作符说明
=等于
<>不等于
!=不等于
<小于
<=小于等于
>大于
>=大于等于
BETWEEN在指定的两个值之间
IS NULL为NULL值

过滤单个值

过滤prod_name='fuses’的数据

SELECT prod_name,prod_price
FROM products
WHERE prod_name='fuses';

过滤价格小于10元的数据

SELECT prod_name,prod_price
FROM products
WHERE prod_price<10; 

过滤价格小于等于10元的数据

SELECT prod_name,prod_price
FROM products
WHERE prod_price<=10;

过滤不匹配

过滤vend_id不是1002的数据

SELECT prod_name,prod_price
FROM products
WHERE vend_id != 1002;

如果条件值为字符串类型,则需要引用引号,如果条件值为数值类型,则不需要引用引号

过滤范围值(BETWEEN)

如果需要检查某个范围的值,可以使用BETWEEN操作符。其语法与其他WHERE子句的操作符不同。BETWEEN需要两个值,过滤范围的开始值和结束值。在范围使用BETWEEN时,必须指定两个值——所需范围的低端值和高端值。这两个值必须用AND关键字分隔。BETWEEN匹配范围中的所有值,包括指定的开始值和结束值。

过滤价格在5元和10元之间的所有产品

SELECT prod_name,prod_price
FROM products
WHERE prod_price BETWEEN 5 AND 10;

空值过滤(IS NULL)

WHERE子句 IS NULL用来检查具有NULL值的列。

SELECT prod_name
FROM products
WHERE prod_price IS NULL;

组合WHERE子句

AND操作符

为了通过不止一个列在过滤,可使用AND操作符给WHERE子句附加条件,用来指示检索满足所有给定的条件的行。

案例:

SELECT prod_id,prod_price,prod_name
FROM products
WHERE vend_id = 1003 AND prod_price <= 10;

OR操作符:

用于过滤检索匹配任意一条件的行

SELECT prod_id,prod_price,prod_name
FROM products
WHERE vend_id = 1003 OR prod_price <= 10;

IN操作符

IN操作符用于指定条件范围,范围中每个条件都可以进行匹配。IN在WHERE中用来指定匹配值的关键字,功能与OR相当

SELECT prod_name,prod_price
FROM products
WHERE vend_id IN(1002,1003)
ORDER BY prod_name;

IN操作符的优点如下:

  • 当需要匹配的值比较多时,IN操作符的语法更清楚且更直观;
  • IN操作符一般比OR操作符执行更快;
  • 在使用IN时,计算的次序更容易管理;
  • IN的一最大优点就是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句;

NOT操作符:

NOT用在WHERE子句中,用来否定后跟的条件表达式,MYSQL中的NOT,支持NOT对IN,BETWEEN和EXISTS子句取反。

待续~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值