查询:
SELECT
FROM
星号 * 代表查询全部的列
缺点在于,无法选择列出现的顺序
ps:sql可以通过换行和空格来分隔单词,但是不建议用换行的方式 不方便;
以及不要在两行之间无故插入空行, 会造成执行错误。
为列设定别名时用as
SELECT AS
FROM
别名可以使用中文,使用中文时需要使用双引号""括起来
注意单词拼写完整,以及大小写一定要规范;
SELECT product_id, product_name, purchase_price
FROM product;
SELECT *
FROM product;
SELECT product_id AS id,
product_name AS name,
purchase_price AS price
FROM product;
-- 常数的查询
SELECT '商品' AS string, 38 AS number, '2009-02-24' AS date,
product_id, product_name
FROM Product;
-- 从结果种删除重复行
SELECT DISTINCT product_type
FROM Product;
-- NULL 数据会被看作单独一种type
SELECT DISTINCT purchase_price
FROM Product;
-- 对多列使用DISTINCT 注意DISTINCT关键字只能用在第一个列名之前
SELECT DISTINCT product_type, regist_date
FROM Product;
-- 使用WHERE语句来选择记录(WHERE后面相当于条件表达式
SELECT product_name, product_type
FROM Product
WHERE product_type = '衣服';
-- 也可以不选取作为选取条件的列(也就是说选取其他条件 展现的只是名字而已 反正type一样 作为条件选取的
SELECT product_name
FROM Product
WHERE product_type = '衣服';
--SQL中子句的书写顺序是固定的 先有from 再有where
/* 找个叫做多行注释
结束的方法如下
*/
-- 2-2算术运算符和比较运算符
SELECT product_name, purchase_price,
sale_price * 2 AS 'sale_price_x2'
FROM product;
-- 注意所有包含NULL的运算,无论+-*/的结果都是NULL
-- 比较运算符=,<,>,ps:<>代表不等于,<=小于等于,同理大于等
-- 日期类,小于代表是时间之前
-- WHERE子句的条件表达式中也可以使用计算表达式
SELECT product_name, sale_price, purchase_price
FROM Product
WHERE sale_price - purchase_price >= 500;
-- 对字符串使用不等号时的注意事项
-- DDL: 创建表
CREATE TABLE Chars
(chr CHAR(3) NOT NULL,
PRIMARY KEY (chr));
-- DML:插入数据
-- BEGIN TRANSACTION; (此句在mysql中需要,在navicat中不需要)
INSERT INTO Chars VALUES ('1');
INSERT INTO Chars VALUES ('2');
INSERT INTO Chars VALUES ('3');
INSERT INTO Chars VALUES ('10');
INSERT INTO Chars VALUES ('11');
INSERT INTO Chars VALUES ('222');
COMMIT;
-- 选出大于‘2’的数据
SELECT chr
FROM Chars
WHERE chr > '2'
-- 字符串类型的数据原则上按照字典顺序进行排序,不能与数字的大小顺序混淆
-- 不能对NULL使用比较运算符,用IS-NULL来代替或者,IS-NOT-NULL
SELECT product_name, purchase_price
FROM Product
WHERE purchase_price IS NULL;
-- 2-3逻辑运算符
-- NOT不能单独使用,NOT-<=和》=的使用效果一样
-- AND和OR运算符,and必须两边都成立,or只需一边成立
SELECT product_name, purchase_price
FROM Product
WHERE product_type = '厨房用具'
AND sale_price >= 3000;
SELECT product_name, purchase_price
FROM Product
WHERE product_type = '厨房用具'
OR sale_price >= 3000;
-- 通过括号强化处理,当and和or混在一起使用时,会自动优先处理and,所以用括号括起来
SELECT product_name, purchase_price
FROM Product
WHERE product_type = '办公用品'
AND ( regist_date = '2009-09-11'
OR regist_date = '2009-09-20');
-- 运算符和真值,其实本质就是判断真假罢了
-- 含有NULL时的真值,用UNKNOWN表示,尽量少用NULL,因为会给后续判断真假带来负担
-- 第二章练习题
-- 2.1
SELECT product_name, regist_date
FROM Product
WHERE regist_date >= '2009-04-28'
-- 2.2等于空值/不等于NULL/FALSE
-- 2.3
SELECT product_name, sale_price, purchase_price
FROM Product
WHERE (sale_price - purchase_price) >= 500;
SELECT product_name, sale_price, purchase_price
FROM Product
WHERE sale_price >= purchase_price + 500;
-- 2.4
SELECT product_name, product_type,
sale_price * 0.9 - purchase_price AS profit
FROM Product
WHERE sale_price * 0.9 - purchase_price > 100
AND (product_type = '办公用品'
OR product_type = '厨房用具');