一、概念
- 数据库:DB(database)
- 数据库软件:DBMS(database manage system)
二、基本操作
SELECT操作
从 products表中检索一个名为prod_name和prod_id的列
SELECT prod_name,prod_id FROM products;
从 products表中检索所有的列
SELECT * FROM products;
从 products表中检索所有供应商(过滤相同的id),使用 DISTINCT 关键字
SELECT DISTINCT vend_id FROM products;
从 products表中检索不多于5行数据,使用 LIMIT 关键字
- 获取前5行(从第一行开始,索引为0即LIMIT 0,5)
SELECT prod_name FROM products LIMIT 5;
- 从第6行开始,获取10条数据(指定开始的行数,和获取的行数)
// 第1种方式 SELECT prod_name FROM products LIMIT 5,10; // 第2中方式 SELECT prod_name FROM products LIMIT 10 OFFSET 6;
限定数据库下的表和表下的列名称
SELECT products.prod_name FROM carshcourse.products;
排序检索数据
排序规则说明:默认按照字母排序,不区分大小写(如要区分大小写,需要在数据库中设置,通过SQL语句设置不了)
- 先按价格排序,然后在每个价格中再按名排序 ,使用 ORDER BY
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price,prod_name;
- 指定排序方向,使用 DESC (降序)
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price DESC;
- 多个排序字段,指定排序方向,未指定的字段按照默认升序 (ASC) 排序
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price DESC,prod_name;
- 使用ORDER BY和LIMIT的组合,能够找出一个列中最高或最低的值
SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1;
简单过滤数据
- 从products表中检索两个列,但不返回所有行,只返回prod_price值为2.50的行
SELECT prod_price,prod_name FROM products WHERE prod_price = 2.50;
- 条件操作符:等于(=)、不等于(<>或者!=)、小于(<)、小于等于(<=)、大于(>)、大于等于(>=)、在指定的两个值之间(BETWEEN)在使用 BETWEEN 时,必须指定两个值——所需范围的低端值和高端值。这两个值必须用AND关键字分隔
SELECT prod_price,prod_name FROM products WHERE prod_price BETWEEN 5 AND 10;
- 空值(NULL)检查
SELECT prod_name FROM products WHERE prod_price IS NULL;
复杂数据过滤
- 检索由供应商1003制造且价格小于等于10美元的所有产品的名称和价格 ( AND )
SELECT prod_price,prod_name FROM products WHERE vend_id = 1003 AND prod_price = 10;
- 检索由任一个指定供应商制造的所有产品的产品名和价格 ( OR )
SELECT prod_price,prod_name FROM products WHERE vend_id = 1002 OR vend_id = 1003;
- 列出价格为10美元(含)以上且由1002或1003制造的所有产品 ,一定要使用“()”,因为AND的计算次序优先级高于OR
SELECT prod_price,prod_name FROM products WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10;;
- IN操作符 - 用来指定条件范围 。例:检索供应商1002和1003制造的所有产品
// 在使用长的合法选项清单时, IN操作符的语法更清楚且更直观 // 在使用IN时,计算的次序更容易管理(因为使用的操作符更少) // IN操作符一般比OR操作符清单执行更快 // IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句 SELECT prod_price,prod_name FROM products WHERE vend_id IN (1002,1003);
- NOT操作符 - 否定之后所跟的任何条件。 例:列出除1002和1003之外的所有供应商制造的产品
SELECT prod_price,prod_name FROM products WHERE vend_id NOT IN (1002,1003);
通配符过滤数据
- LIKE操作符
- 百分号(%)通配符 - 表示任何字符出现任意次数。 注意:尾部的空格会干扰通配符匹配,即使值使用"%",也不能匹配值为NULL的元素。
// 例:检索任意以jet起头的词 SELECT prod_price,prod_name FROM products WHERE product_name LIKE 'jet%'; // 例:匹配任何位置包含文本anvil的值 SELECT prod_price,prod_name FROM products WHERE product_name LIKE '%anvil%'; // 例:找出以s起头以e结尾的所有产品 SELECT prod_price,prod_name FROM products WHERE product_name LIKE &
- 百分号(%)通配符 - 表示任何字符出现任意次数。 注意:尾部的空格会干扰通配符匹配,即使值使用"%",也不能匹配值为NULL的元素。