SQL运算符
1、算术运算符
- +:执行加法运算。
- -:执行减法运算。
- *:执行乘法运算。
- /:用左操作数除右操作数。
- %:用左操作数除右操作数并返回煜书余数。
2、比较运算符 - =:检查两个操作数的值是否相等,如果是,则条件为真(true)。
- !=或<>:检查两个操作数的值是否相等,如果值不相等则条件为真(true)。
- <或>:检查左操作数的值是否小于或大于右操作数的值,如果是则条件为真(true)。
- <=或>=::检查左操作数的值是否小于等于或大于等于右操作数的值,如果是则条件为真(true)。
- !<或!>::检查左操作数的值是否不小于或不大于右操作数的值,如果是则条件为真(true)。
3、逻辑运算符
1)、ALL:用于将值与另一个值集中的所有值进行比较。
2)、AND:允许在SQL语句的WHERE子句中指定多个条件。
3)、ANY:用于根据条件将值与列表中的任何适用值进行比较。
4)、BETWEEN:用于选取在给定最小值和最大值内的值。值可以是数字,文本或日期。语法:
SELECT column_name(s)
FROM table_name
WHERE column_name (NOT)BETWEEN value1 AND value2;
eg(选择价格在10到20之间但CategoryID不是1、2或3的所有产品):
SELECT * FROM Products
WHERE (Price BETWEEN 10 AND 20)
AND NOT CategoryID IN (1,2,3);
5)、EXISTS:用于搜索指定表中是否存在满足特定条件的行。
6)、IN:允许在WHERE子句中指定多个值。
IN运算符是多个OR条件的简写。语法:
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);
或
SELECT column_name(s)
FROM table_name
WHERE column_name IN (SELECT STATEMENT);
7)、LIKE:用于使用通配符运算符将值与类似值进行比较。
在WHERE子句中使用LIKE运算符来搜索列中的指定模式。
有两个通配符与LIKE运算符一起使用:
- %:表示零个,一个或多个字符
- _:表示单个字符
语法:
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
LIKE运算符 | 描述 |
---|---|
WHERE CustomerName LIKE ‘a%’ | 查找以“a”开头的任何值 |
WHERE CustomerName LIKE ‘%a’ | 查找以“a”结尾的任何值 |
WHERE CustomerName LIKE ‘%or%’ | 在任何位置查找任何具有“or”的值 |
WHERE CustomerName LIKE ‘_r%’ | 在第二个位置查找任何具有“r”的值 |
WHERE CustomerName LIKE ‘a_%_%’ | 查找以“a”开头且长度至少为3个字符的值 |
WHERE ContactName LIKE ‘a%o’ | 找到以"a"开头,以"o"结尾的值 |
8)、NOT:否定运算符,翻转使用它的逻辑运算符的含义。
9)、OR:用于组合SQL语句的WHERE子句中的多个条件。
10)、IS NULL:用于将值与NULL值进行比较。
11)、 UNIQUE:搜索指定表的每一行的唯一性(无重复项)。
ildcards通配符
通配符用于替换字符串中的任何其他字符。通配符与SQL LIKE运算符一起使用。
SQL [charlist] 通配符(选择所有客户City以"b"、"s"或"p"开头)。eg:
SELECT * FROM Customers
WHERE City LIKE '[bsp]%';
[!charlist]通配符(选择所有客户的城市不以“b”,“s”或“p”开头)eg:
SELECT * FROM Customers
WHERE City LIKE '[!bsp]%';
或
SELECT * FROM Customers
WHERE City NOT LIKE '[bsp]%';
SQL表达式
表达式是计算值的一个或多个值、运算符和SQL函数的组合。
句法:
SELECT语句的基本语法,eg:
SELECT column1, column2, columnN
FROM table_name
WHERE [CONDITION|EXPRESSION];
1、布尔表达式(基于匹配单个值获取数据),句法:
SELECT column1, column2, columnN
FROM table_name
WHERE SINGLE VALUE MATCHING EXPRESSION;
eg:
(表)
SQL> SELECT * FROM CUSTOMERS;
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
7 rows in set (0.00 sec)
SQL> SELECT * FROM CUSTOMERS WHERE SALARY = 10000;
+----+-------+-----+---------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+-------+-----+---------+----------+
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+-------+-----+---------+----------+
1 row in set (0.00 sec)
2、数值表达式(用于在任何查询中执行任何数学运算),句法:
SELECT numerical_expression as OPERATION_NAME
[FROM table_name
WHERE CONDITION] ;
eg:
SQL> SELECT (15 + 6) AS ADDITION
+----------+
| ADDITION |
+----------+
| 21 |
+----------+
1 row in set (0.00 sec)
有几个内置函数,如avg()、sum()、count()等,用于对表或特定表列执行所谓的聚合数据计算。
SQL> SELECT COUNT(*) AS "RECORDS" FROM CUSTOMERS;
+---------+
| RECORDS |
+---------+
| 7 |
+---------+
1 row in set (0.00 sec)
3、日期表达式(返回当前系统日期和时间值)。eg:
SQL> SELECT CURRENT_TIMESTAMP;
+---------------------+
| Current_Timestamp |
+---------------------+
| 2009-11-12 06:40:23 |
+---------------------+
1 row in set (0.00 sec)
或
SQL> SELECT GETDATE();;
+-------------------------+
| GETDATE |
+-------------------------+
| 2009-10-22 12:07:18.140 |
+-------------------------+
1 row in set (0.00 sec)
4、选择数据库 USE语句
SQL USE语句用于选择SQL架构中的任何现有数据库。句法:
USE DatabaseName;
查看可用的数据库,eg:
SQL> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| AMROOD |
| TUTORIALSPOINT |
| mysql |
| orig |
| test |
+--------------------+
6 rows in set (0.00 sec)
SQL SELECT TOP 子句
用于指定要返回的记录数量。语法:
SELECT TOP number|percent column_name(s)
FROM table_name
WHERE condition;
SELECT TOP 实例(从"Customers" 表中选择前两条记录),eg:
SELECT TOP 2 * FROM Customers;
SELECT TOP PERCENT 实例(从 “Customers” 表中选择前50%的记录),eg:
SELECT TOP 50 PERCENT * FROM Customers;
TOP,LIMIT和ROWNUM(从"Customers"表中选择国家为"Germany"的前三个记录):
SELECT TOP 3 * FROM Customers;
WHERE Country='Germany';
LIMIT:
SELECT * FROM Customers
WHERE Country='Germany';
LIMIT 3;
ROWNUM:
SELECT * FROM Customers
WHERE Country='Germany' AND ROWNUM <= 3;
LIMIT是一种简单地分页方法,使用它可以减少查询数据返回的时间,提高效率
Join连接
用于把来自两个或多个表的行结合起来。
1)、INNER JOIN(内部连接):如果表中有至少一个匹配,则返回行
语法:
SELECT column_name(s)
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;
2)、LEFT JOIN(左连接):即使右表中没有匹配,也从左表返回所有的行
语法:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
或
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
3)、RIGHT JOIN(右连接):即使左表中没有匹配,也从右表返回所有的行
语法:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;
4)、FULL JOIN(完整外部连接):只要其中一个表中存在匹配,则返回行
语法:
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;
5)、SELF JOIN(自连接):用于将表连接到自己,就好像该表是两个表一样,临时重命名了SQL语句中的至少一个表
语法:
SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;
6)、?CARTESIAN JOIN:从两个或多个连接表返回记录集的笛卡儿积