SELECT<列名>, ……
FROM<表名>WHERE<条件表达式>;-- 用来选取product type列为衣服的记录的SELECT语句SELECT product_name, product_type
FROM product
WHERE product_type ='衣服';-- 也可以选取出不是查询条件的列(条件列与输出列不同)SELECT product_name
FROM product
WHERE product_type ='衣服';
星号(*)代表全部列的意思。
SQL中可以随意使用换行符,不影响语句执行(但不可插入空行)。
设定汉语别名时需要使用双引号(")括起来。
在SELECT语句中使用DISTINCT可以删除重复行。
-- 想要查询出全部列时,可以使用代表所有列的星号(*)。SELECT*FROM<表名>;
-- SQL语句可以使用AS关键字为列设定别名(用中文时需要双引号)。SELECT product_id As id,
product_name As name,
purchase_price AS"进货单价"FROM product;-- 使用DISTINCT删除product_type列中重复的数据SELECTDISTINCT product_type
FROM product;
2. 运算符
<>:和 ~ 不相等
SELECT子句中可以使用常数或者表达式。
字符串类型的数据原则上按照字典顺序进行排序,不能与数字的大小顺序混淆。
希望选取NULL记录时,需要在条件表达式中使用IS NULL运算符。
希望选取不是NULL的记录时,需要在条件表达式中使用IS NOT NULL运算符。
-- SQL语句中也可以使用运算表达式SELECT product_name, sale_price, sale_price *2AS"sale_price x2"FROM product;-- WHERE子句的条件表达式中也可以使用计算表达式SELECT product_name, sale_price, purchase_price
FROM product
WHERE sale_price - purchase_price >=500;/* 对字符串使用不等号
首先创建chars并插入数据
选取出大于‘2’的SELECT语句*/-- DDL:创建表CREATETABLE chars
(chr CHAR(3)NOTNULL,PRIMARYKEY(chr));-- 选取出大于'2'的数据的SELECT语句('2'为字符串)SELECT chr
FROM chars
WHERE chr >'2';-- 选取NULL的记录SELECT product_name, purchase_price
FROM product
WHERE purchase_price ISNULL;-- 选取不为NULL的记录SELECT product_name, purchase_price
FROM product
WHERE purchase_price ISNOTNULL;
想要表示“不是……”时,除了前文的<>运算符外,还有NOT。
NOT不能单独使用,必须和其他查询条件组合起来使用。
-- 选取出销售单价大于等于1000日元的记录SELECT product_name, product_type, sale_price
FROM product
WHERE sale_price >=1000;-- -- 选取出销售单价小1000日元的记录SELECT product_name, product_type, sale_price
FROM product
WHERENOT sale_price >=1000;
通过括号优先处理
-- 通过使用括号让OR运算符先于AND运算符执行SELECT product_name, product_type, regist_date
FROM product
WHERE product_type ='办公用品'AND( regist_date ='2009-09-11'OR regist_date ='2009-09-20');
-- 使用如下代码构建示例表CREATETABLEuser(
id INTNOTNULLAUTO_INCREMENT,
name VARCHAR(50),
date_login DATE,PRIMARYKEY(id));INSERTINTOuser(name, date_login)VALUES(NULL,'2017-03-12'),('john',NULL),('david','2016-12-24'),('zayne','2017-03-02');
-- ISNULL( ) 函数等同于使用 IS NULL 比较运算符/*先使用 ISNULL(name) 字段进行升序排列,
而只有当 name 列值为 NULL 时,ISNULL(name) 才为真,所以其排到末行,
而 name ASC 则实现了 非NULL 值升序排列。*/-- IS NULLSELECT*FROMuserORDERBY name ISNULLASC,name ASC;-- ISNULL()SELECT*FROMuserORDERBY ISNULL(name)ASC,name ASC;
还可以使用 COALESCE 函数实现需求
SELECT*FROMuserORDERBYCOALESCE(name,'zzzzz')ASC;
GROUP BY 子句中不能使用SELECT 子句中定义的别名,但是在 ORDER BY 子句中却可以使用别名 这是因为 SQL 在使用 HAVING 子句时 SELECT 语句的执行顺序为: FROM → WHERE → GROUP BY → SELECT → HAVING → ORDER BY 其中 SELECT 的执行顺序在 GROUP BY 子句之后,ORDER BY 子句之前。 当在 ORDER BY 子句中使用别名时,已经知道了 SELECT 子句设置的别名,但是在 GROUP BY 子句执行时还不知道别名的存在,所以在 ORDER BY 子句中可以使用别名,但是在GROUP BY中不能使用别名。