COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入);
COUNT(*) 函数返回表中的记录数;
COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目;
Max():MAX 函数返回一列中的最大值。NULL 值不包括在计算中。
SELECT MAX(column_name) FROM table_name(MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低值)。
Upper()、lower()分别转化成大写、小写;
Round():ROUND 函数用于把数值字段舍入为指定的小数位数。
SELECT ROUND(column_name,decimals) FROM table_name
column_name | 必需。要舍入的字段。 |
decimals | 必需。规定要返回的小数位数。 |
AVG()函数:
如:希望找到 OrderPrice 值高于 OrderPrice 平均值的客户。我们使用如下 SQL 语句:
SELECT Customer FROM Orders
WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)
first()函数:
希望查找 "OrderPrice" 列的第一个值。使用如下 SQL 语句:
SELECT FIRST(OrderPrice) AS FirstOrderPrice FROM Orders
LAST() 函:数返回指定的字段中最后一个记录的值。
mid()函数:MID 函数用于从文本字段中提取字符。
SELECT MID(column_name,start,length) FROM table_name
参数 | 描述 |
---|---|
column_name | 必需。要提取字符的字段。 |
start | 必需。规定开始位置(起始值是 1)。 |
length | 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。 |
SELECT MID(City,1,3) as SmallCity FROM Persons
FORMAT 函数: 用于对字段的显示进行格式化。
SELECT FORMAT(column_name,format) FROM table_name
参数 | 描述 |
---|---|
column_name | 必需。要格式化的字段。 |
format | 必需。规定格式。 |
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。HAVING 子句可以让我们筛选分组后的各组数据
有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。
下面列出了可以使用的 JOIN 类型,以及它们之间的差异。
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
LastName | FirstName | Address | City |
---|---|---|---|
Gates | Bill | Xuanwumen 10 | Beijing |
Wilson | Champs-Elysees |
我们为 lastname 是 "Wilson" 的人添加 firstname:
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
我们会修改地址(address),并添加城市名称(city):
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
WHERE LastName = 'Wilson'
mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15 ,注意,10为偏移量
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
希望从 "Persons" 表中选取居住在以 "N" 开始的城市里的人,我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City LIKE 'N%'
提示:"%" 可用于定义通配符(模式中缺少的字母)。
从 "Persons" 表中选取居住在包含 "lon" 的城市里的人:我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City LIKE '%lon%'
通过使用 NOT 关键字,我们可以从 "Persons" 表中选取居住在不包含 "lon" 的城市里的人:我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City NOT LIKE '%lon%'
在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。
SQL 通配符必须与 LIKE 运算符一起使用。
在 SQL 中,可使用以下通配符:
通配符 | 描述 |
---|---|
% | 替代一个或多个字符 |
_ | 仅替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist] 或者 [!charlist] |
不在字符列中的任何单一字符 |
从 "Persons" 表中选取名字的第一个字符之后是 "eorge" 的人:我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE FirstName LIKE '_eorge'
希望从 "Persons" 表中选取的这条记录的姓氏以 "C" 开头,然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er":
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE LastName LIKE 'C_r_er'
希望从 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City LIKE '[ALN]%'
希望从 "Persons" 表中选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人:我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City LIKE '[!ALN]%'
操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
如需以字母顺序显示介于 "Adams"和 "Carter"之间的人,请使用下面的 SQL:
SELECT * FROM Persons
WHERE LastName BETWEEN 'Adams' AND 'Carter'
如需使用上面的例子显示范围之外的人,请使用 NOT 操作符:
SELECT * FROM Persons
WHERE LastName NOT BETWEEN 'Adams' AND 'Carter'
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY
FOREIGN KEY 约束用于预防破坏表之间连接的动作。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
下面的 SQL 在 "Orders" 表创建时为 "Id_P" 列创建 FOREIGN KEY:
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)
如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
CHECK 约束用于限制列中的值的范围。
DEFAULT 约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新记录。
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
如果在表已存在的情况下为 "City" 列创建 DEFAULT 约束,请使用下面的 SQL:
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'
如需撤销 DEFAULT 约束,请使用下面的 SQL:
ALTER TABLE Persons
ALTER City DROP DEFAULT
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name
ON table_name (column_name)
注释:"column_name" 规定需要索引的列。
在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
如果仅仅需要除去表内的数据,但并不删除表本身,请使用 TRUNCATE TABLE 命令(仅仅删除表格中的数据):
TRUNCATE TABLE 表名称
我们通常希望在每次插入新记录时,自动地创建主键字段的值。
我们可以在表中创建一个 auto-increment 字段。
默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1。
要让 AUTO_INCREMENT 序列以其他的值起始,请使用下列 SQL 语法:
ALTER TABLE Persons AUTO_INCREMENT=100
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
注释:视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用 SQL 语句来重建数据。
MySQL 也拥有类似 ISNULL() 的函数。不过它的工作方式与微软的 ISNULL() 函数有点不同。
在 MySQL 中,我们可以使用 IFNULL() 函数,就像这样:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我们可以使用 COALESCE() 函数,就像这样:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
SUBSTR函数是用来截取数据库某一列字段中的一部分。
在各个数据库的函数名称不一样
常用的方式是:
SBUSTR(str,pos); 从pos开始的位置,一直截取到最后。
还有一种比较常用的是:
SUBSTR(str,pos,len);从pos开始的位置,截取len个字符(空白也算字符)。
注:
mysql中的substr()函数和hibernate的substr()参数都一样,就是含义有所不同。
mysql中的start是从1开始的,而hibernate中的start是从0开始的。