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所有比较运算符

2NOT

3AND

4OR

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 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 ,聚集函数 FROM table_name WHERE 条件 GROUP BY 列名 HAVING 分组之后的条件

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

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

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

// 18.内连接查询

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

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

-----------------------------------------------

隐式内连接:

SELECT

FROMA ,B  WHERE A.列 = B.列

-----------------------------------------------

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

SELECT

FROMA [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

FROMA [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 FROM table_name

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

SELECT 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'

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容