SQL语句基础知识(总结)

 

前言 

自己在工作中经常会写sql语句,用的多了就想总结一下以便以后需要用到时候查看。同时也希望对大家有用~

 

// 1.select 从表中选取数据

select 列名称 from 表名称

select * from 表名称

 

// 2.distinct 消除结果中重复的数据

select distinct 列名称 from 表名称

 

// 3.order by  根据制定的列对结果集进行排序(升序:ASC  降序:DESC )

(默认按升序对记录进行排序)   如果希望按照降序使用DESC关键字

order by number DESC 某一个字段从大到小排列

order by number ASC 某一个字段从小到大排列

案例:select  distinct(去掉重复的)  GPA.*  from  表名 (表名简写) order by  表名.字段

select distinct GPA.* from GD_PROJECT_APPLY GPA  order by GPA.pro_actionid

案例:

以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):

SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber

以字母逆序显示公司名称:

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC

 

以字母逆序显示公司名称,并以数字顺序显示顺序号:

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC

 

// 4.where 有条件的从表中选取数据(先执行from再执行where)

select 列名称 from 表名称 where 列 运算符 值

SELECT * FROM Persons WHERE City=’Beijing’

操作符      描述

————————————

=         等于

<>或!=    不等于

>         大于

<         小于

>=        大于等于

<=        小于等于

BETWEEN    在某个范围内

LIKE      搜索某种模式(模糊查询)

 

优先级         运算符

————————————

1                所有比较运算符

2                NOT

3                AND

4                OR

 

SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。

SELECT * FROM Persons WHERE FirstName=’Bush’

SELECT * FROM Persons WHERE Year>1965

 

// 5.AND & OR 运算符

AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。

如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。

如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

案例:SELECT * FROM Persons WHERE FirstName=’Thomas’ AND LastName=’Carter’

SELECT * FROM Persons WHERE firstname=’Thomas’ OR lastname=’Carter’

我们也可以把 AND 和 OR 结合起来(使用圆括号来组成复杂的表达式):

案例:SELECT * FROM Persons WHERE (FirstName=’Thomas’ OR FirstName=’William’) AND LastName=’Carter’

 

// 6.INSERT INTO 语句  用于向表格中插入新的行

INSERT INTO 表名称 VALUES (值1, 值2,….)

INSERT INTO Persons VALUES (‘Gates’, ‘Bill’, ‘Xuanwumen 10’, ‘Beijing’)

我们也可以指定所要插入数据的列:

INSERT INTO table_name (列1, 列2,…) VALUES (值1, 值2,….)

INSERT INTO Persons (LastName, Address) VALUES (‘Wilson’, ‘Champs-Elysees’)

 

// 7.Update 语句 用于修改表中的数据

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

UPDATE Person SET FirstName = ‘Fred’ WHERE LastName = ‘Wilson’

 

// 8.DELETE 语句 用于删除表中的行

DELETE FROM 表名称 WHERE 列名称 = 值

 

// 9.AS 语句 设置列名的别名

SELECT id as pro_id from table

 

// 10.BETWEEN  选取介于两个值之间的数据范围.这些值可以是数值、文本或者日期

SELECT * FROM Persons WHERE LastName BETWEEN ‘Adams’ AND ‘Carter’

如需使用上面的例子显示范围之外的人,请使用 NOT 操作符

 

// 11.IN 操作符  使用IN运算符,判断列的值是否在指定的集合中

格式:SELECT <selectList> FROM table_name WHERE 列名 IN (值1,值2….)

案例:SELECT * FROM Persons WHERE LastName IN (‘Adams’,’Carter’)

 

// 12.IS NULL:判断列的值是否为空

格式:WHERE 列名 IS NULL;

 

// 13.LIKE运算符执行通配查询(模糊查询)

%:通配符:可表示零或多个字符。

_:通配符:可表示一个字符。

案例:

SELECT * FROM Persons WHERE City LIKE ‘N%’     以N开头

SELECT * FROM Persons WHERE City LIKE ‘%g’     以g结尾

SELECT * FROM Persons WHERE City LIKE ‘%lon%’  包含lon

 

// 14.LIMIT分页查询

格式:

SELECT * FROM table_name LIMIT ?,?

SELECT * FROM table_name LIMIT beginIndex,pageSize

 

beginIndex = (currentPage-1) * pageSize

第一个?: 表示本页,开始索引(第多少个,从0开始)

第二个?: 每页显示的条数

案例:

规定:每页显示3条数据. pageSize = 3

第一页:   SELECT * FROM `product` LIMIT 0, 3

第二页:   SELECT * FROM `product` LIMIT 3, 3

第三页:   SELECT * FROM `product` LIMIT 6, 3

第 N页:   SELECT * FROM `product` LIMIT (N-1)*3, 3

 

// 15.CONCAT(str1,str2,…)

1,返回结果为连接参数产生的字符串。

2,如有任何一个参数为NULL ,则返回值为 NULL

3,允许有一个或多个参数

为方便用户浏览查询的结果数据,有时需要设置显示格式,可以使用CONCAT函数来连接字符串。

需求:查询商品的名字和零售价。

格式:xxx商品的零售价为:xxx

SELECT CONCAT(productName,’商品的零售价为:’,salePrice) AS productSalePrice FROM product;

 

// 16.聚集函数

函数         说明

AVG()        返回某列的平均值

COUNT()      返回某列的行数

MAX()        返回某列的最大值

MIN()        返回某列的最小值

SUM()        返回某列值之和

 

AVG()函数

SELECT AVG(prod_price) AS avg_price FROM Products;

AVG()也可以用来确定特定列或行的平均值。SELECT AVG(prod_price) AS avg_price FROM Products WHERE pro_id = ’02’;

COUNT()函数

(1).COUNT(*) 对表中行的数目进行计数,不管表中列包含空值(NULL)还是非空值 (警告:DISTINCT 不能用于COUNT(*))

(2).COUNT(column) 对特定列中具有值的行进行计数,忽略NULL值

SUM()函数

SELECT SUM(quantity) AS items_ordered FROM OrderItems WHERE order_num = 200;

 

// 17.GROUP BY 分组查询

可以使用GROUP BY 子句将表中的数据分成若干组,再对分组之后的数据做统计计算,一般使用聚集函数才使用GROUP BY.

语法格式:

SELECT <selectList>,聚集函数 FROM table_name WHERE 条件 GROUP BY 列名 HAVING 分组之后的条件

注意:GROUP BY 后面的列名的值要有重复性分组才有意义。

SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer

查找每个客户的总金额(总订单)

 

// 18.内连接查询

内连接查询:是相对于外连接。

内连接分为:隐式内连接、显示内连接(推荐),其查询效果相同,仅仅只是语法不同而已。

———————————————–

隐式内连接:

SELECT <selectList>

FROM  A ,B  WHERE A.列 = B.列

———————————————–

显示内连接(推荐写法):

SELECT <selectList>

FROM A [INNER] JOIN B ON A.列 = B.列

———————————————–

需求:查询所有商品的名称和分类名称:

隐式内连接: SELECT p.productName,pd.dirName FROM product p,productdir pd WHERE p.dir_id = pd.id

显示内连接: SELECT p.productName,pd.dirName FROM product p INNER JOIN productdir pd ON p.dir_id = pd.id

显示内连接: SELECT p.productName,pd.dirName FROM product p JOIN productdir pd ON p.dir_id = pd.id

———————————————–

在做等值连接的时候,若A表中和B表中的列名相同. 则可以简写:

SELECT <selectList>

FROM  A [INNER] JOIN B USING(同名的列)

前提:在emp和dept表中都有deptno列. 并且是外键关系。

如: SELECT * FROM emp JOIN dept USING (deptno)

 

// 19.自连接查询

把一张表看成两张来做查询.

需求: 查询每个商品分类的名称和父分类名称:

隐式内连接:

SELECT sub.dirName,super.dirName FROM productdir super,productdir sub WHERE sub.parent_id = super.id

显示内连接:

SELECT sub.dirName,super.dirName FROM productdir super JOIN productdir sub ON sub.parent_id = super.id

 

// 20.外连接查询

外连接:解决内连接的数据丢失问题;

外连接分为:左连接,右连接,全连接;

左连接:

SELECT table1.column, table2.column FROM table1 LEFT [OUTER] JOIN table2 ON (table1.column_name = table2.column_name);

在左连接中,会返回所有左边表table1中的行,即使在右边的表中没有可对应的列值。即对连接中左边的表中的记录不加限制

右连接:

SELECT table1.column, table2.column FROM table1 RIGHT [OUTER] JOIN table2 ON (table1.column_name = table2.column_name);

RIGHT OUTER JOIN中会返回所有右边表table2中的行,即使在左边的表中没有可对应的列值。即对连接中右边的表中的记录不加限制

 

SQL的执行顺序(重点):

1.先执行FROM子句:  确定查询哪一张表

2.接着执行WHERE :  过滤筛选条件

3.接着做SELECT  :  确定选择的列

4.最后做ORDER BY:  对结果集按照某列排序

在WHERE子句中不能使用SELECT中的别名

 

 

多表查询:

单表查询:从一张表中查询数据

SELECT <selectList> FROM table_name

 

多表查询:从多张表中联合查询出数据

SELECT <selectList> FROM 表名A,表名B,表名C

 

 

数据库对象_约束

1.非空约束(NK):NOT NULL,不允许某列的内容为空。

2.设置列的默认值:DEFAULT。

3.唯一约束(UK):UNIQUE,在该表中,该列的内容必须唯一。

4.主键约束:PRIMARY KEY, 非空且唯一。

5.主键自增长:AUTO_INCREMENT,从1开始,步长为1。

6.外键约束:FOREIGN KEY,A表中的外键列.A表中的外键列的值必须参照于B表中的某一列(B表主键)。

注意:在MySQL中,InnoDB支持事务和外键.

修改表的存储引擎为InnoDB: ALTER TABLE 表名 ENGINE=’InnoDB’

 

 

 

 

 

 

 

 

 

 

    原文作者:SQL
    原文地址: https://blog.csdn.net/coder_xin/article/details/78685564
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞