推广 热搜: 行业  设备    系统  参数  经纪    教师  机械  中国 

数据库SQL 基础语句

   日期:2024-11-10     作者:n19v1    caijiyuan   评论:0    移动:http://dgaty.xhstdz.com/mobile/news/3009.html
核心提示:(数据库定义语言)用来创建或删除存储数据用的数据库以及数据库中的表对象。 CREATE:创建数据库和表等对象D

(数据库定义语言)用来创建或删除存储数据用的数据库以及数据库中的表对象。

数据库SQL 基础语句

CREATE:创建数据库和表等对象

DROp:删除数据库和表等对象

ALTER:修改数据库备表等对象的结构

(数据操纵语言)用来查询或者变更表中的记录

SELECT:查询表中的数据

INSERT:向表中插入新的数据

UPDATE:更新表中的数据

DELETE:删除表中的数据

(数据控制语言)用来确认和取消对数据库中的数据进行的变更,对RDBMS的用户是否有权限操作数据库中的对象进行设定

COMMIT:确认对数据库中的数据进行的变更

ROLLBACK:取消对数据库中的数据进行的变更

GRANT:赋予用户操作权限

REVOKE:取消用户的操作权限

CREATE TABLE product ( id char(4) not null, name VARCHAr(100) not null, type VARCHAr(32) not null, sale_price INTEGER , purchase_price INTEGER , regist_date INTEGER , PRIMARY KEY (id) );

CREATE DATAbase shop

删除表

DROP TABLE <表名>

添加列

ALTER TABLE <表名> ADD COLUMN <列的定义>

删除列

ALTER TABLE <表名> DROP COLUMN<列名>

修改表名

RENAME TABLE <变更前的名称> to <变更后的名称>

查询所有的列

SELECT * FROM <表名>

为列设置别名

SELECt product_id AS id,

               prorduct_name AS name

from product

为列设置中文别名

SELECt product_id AS "商品编号",

               prorduct_name AS "商品名称"

from product

从结果中删除重复行(distinct 只能用在第一个列名之前

select distinct product_id from product 

where查询

select product_name from product where product_type = ‘衣服’

注意

与null有关的计算结果全部是null

字符串类型的数据原则上按照字典顺序进行排序,不能与数字的大小顺序混淆

不能对null使用比较运算符

SQL语句使用算术表达式(将价格*2并列出来

select product_name,sale_price,sale_price *2 AS “sale_price_*2” from product

比较运算符(<>不等于=等于,>=大于等于

select product_name ,product_type from product where sale_price <> 500

专门用来取出为null的SQL语句(非null用IS NOT NULL

select product_name ,purchase_price from product where purchase_price IS NULL

NOT运算符(无法单独使用,必须和其他查询条件组合使用

select product_name,product_type,sale_price from product where NOT sale_price >= 1000

AND运算符(两侧的查询条件都成立时才成立

OR运算符(两侧的查询条件有一个成立时整个查询条件都成立

通过括号强化处理(查询日期为28号或者29号的办公用品

select product_name,product_type,regist_data

        from product

        where product_type = '办公用品'

        AND ( regist_date = '2021 -06-28'

                OR redist_date='2021-06-29'

常用函数

COUNT:计算表中的记录数(行数

SUM:计算表中数值列中数据的合计值

AVG:计算表中数值列中数据的平均值

MAX:求出表中任意列中数据的最大值

MIN:求出表中任意列中数据的最小值

计算表中数据的行数

select count(*)from product

计算null之外的数据的行数(返回的结果不包含null

select count(purchase_price)from product 

计算合计值

select sum(sale_price,sum(purchase_price)from product

计算平均值

select avg(sale_price,avg(purchase_price)from product

计算最大值和最小值

select max(sale_price,min(purchase_price)from product

使用聚合函数删除重复值(关键字DISTINCT

计算去除重复后的数据行数(关键字在里面

select count(distinct product_type)from product

先清楚重复行再计算数据行数(关键字在外面

select distinct count(product_type)from product 

注意

聚合键中包含null的情况

执行顺序

from->where->group by->select

GROUP BY子句(按照商品种类统计数据行数

select product_type,count(*) from product group by product 

使用WHERe子句时的GROUP BY

select purchase_price,count(*

        from product

        where product_type='衣服'

        group by purchase_price

注意

WHERe子句只能指定记录(行)的条件,不能用来指定组的条件

HAVINg子句可以对集合指定条件

执行顺序

select->from->where->group by->having

HAVINg子句 (将商品类型的行数为2的商品类型查询出来(对聚合行数进行运算符比较

select product_type,count(*

        from product

        group by product_type

        having count(*=2

注意

ORDER BY 子句必须写在SELECt语句的末尾

使用含有null的列作为排序键时,null会在开头或者末尾进行汇总

在排序键

子句的书写顺序

select->from->where->group by->having->oorder by

子句的执行顺序

from->where->group by->having->select->order by

ORDER BY子句(按照销售价格升序排列

select product_id,product_name,sale_price,purchase_price

        from product

        order by sale_price

指定升序或降序(ASC升序,DESC降序

select product_id,product_name,sale_price,purchase_price

        from product

        order by sale_price DESC

指定多个排序键(但价格相同时,按照id进行升序排序

select product_id,product_name,sale_price,purchase_price

        from product

        order by sale_price,product_id

OERDER BY子句中可以使用SELECt子句中未使用的列和聚合函数

select product_name,sale_price,purchase_price

        from product

        order by product_id

select product_type,count(*

        from product

        group by product_type

        order by count(*

对表进行全列INSERT时,可以省略表明后的列清单

insert into product values '0005','高压锅','厨房用具',6800,5000,'2021-06-28'

插入默认值

1.使用DEFAULT关键字

2.省略需要插入默认值的列,即不向列插入值

从其他表中复制全部数据

insert into <复制到哪个表> (列名)select (现有表的列名,两个格式需要一致) from product

从其他表中复制部分数据(可复制修改过的数据

insert into <复制到哪个表>(列名)select (列名(与前面格式一致,可使用聚合函数

from product group by product_type 

注意

DROp TABLE:可以将表完全删除

DELETE:会留下容器,删除表中的全部数据

保留数据表,仅删除全部数据行

delete from <表名>

指定删除对象的delete语句(搜索型DELETE

delete from<表名>where<条件> 

对某一列进行全部修改

UPDATe <表名> SET<列名> = <修改的值>

指定条件的UPDATE语句(搜索型UPDATE

update <表名>

        set<列名> = <修改的值>

        where <条件>

多列更新

1.使用都好逗号对列进行分隔排列

update product

        set sale_price=sale_price*10

        purchase_price=purchase_price/2

where produce_type='厨房用具'

2.将列用)括起来

update product

        set(sale_price=sale_price*10,purchase_price=purchase_price/2

where produce_type='厨房用具'

原子性:是指在事务结束时,其中所包含的更新处理要么全部执行,要么完全不执行。

一致性:是指事务中包含的处理要满足数据库提前设置好的约束,如:主键约束或者NOT

null约束。

隔离性:是指保证不用事务之间互不干扰的特性。

持久性:是指在事务结束后,能够保存到本地,即永久保存起来。

START TRANSACTION(开启事务

        需要执行的任务 

CONMMIT(提交事务

注意

从SQL的角度来看,视图和表是相同的,两者的区别在于表中保存的是实际的数据,而视图中保存的是select语句(视图本身并不存储数据)

避免在视图的基础上创建视图,多重视图会降低SQL的性能

定义视图时不能使用OEDER BY 子句

视图和表需要同时进行更新,因此通过汇总得到的视图无法进行更新

创建视图

create view 视图名称(<视图列名1>,<视图列名2>,<视图列名3>...)

as

<select 语句> 

使用视图

select * from 视图名称

删除视图

drop view 视图名称

通俗的理解子查询就是在一个select语句里面查询的是另一个select语句返回的结果(可以多重嵌套)

子查询就是一次性视图(select语句),与视图不同,子查询在select语句执行完毕后就会消失

标量子查询就是只能返回一行一列的子查询

随着子查询的嵌套层数的增加,SQL语句会变得越来越难读懂,性能也会越来越差

子查询(首先执行内层的select语句,然后执行外层的select查询语句) 

select product_type,cnt_product

        from (

        select product_type,count(*) AS cnt_product

        from product

        group by product_type       

)AS productSum

标量子查询的书写位置

1.在select子句中使用标量子查询

select product_id,

        product_name,

        sale_price,

        (select avg(sale_price)from product AS avg_price)--------(标量子查询)

        from product

2.在having子句中使用标量子查询

select product_type,avg(sale_price)

        from product

        group by product_type

        having avg(sale_price) >(

                select avg(sale_price) from product

)--------(标量子查询)

关联子查询和GROUP BY子句一样,可以对表中的数据进行切分

关联子查询的结合条件一定要写在子查询中

通过关联子查询按照商品种类对平均销售单价进行比较

( 获得的结果是在各自的商品种类里售价高于平均售价的商品)

select product_type,product_name,sale_price

        from product AS p1

        where sale_price > (select avg(sale_price)

                                                from product AS p2

                                                where p1.product_type = p2.product_type--------(当type相等时,才将当前商品的单价与当前type的平均价格进行比较)

                                                group by product_type) 

函数大值分为以下几种

算术函数:用来进行数值计算的函数

字符串函数:用来进行字符串操作的函数

日期函数:用来进行日期操作的函数

转换函数:用来转换数据类型和值的函数

聚合函数:用来进行数据聚合的函数

算术函数

加减乘除

绝对值 ABS(将n列里面的值全部进行绝对值运算,并展示到新一列(别名表示))

select <n>,

        ABS(n) AS  别名 

from 表名 

求余 MOD (计算除法(n/p)的余数)

select n,p,

        mod(n,p) AS 别名

from 表名

四舍五入 ROUND (对m列的数值进行n列位数的四舍五入处理)

select m,n,

        round(m,n) AS 别名

from 表名

字符串函数

拼接 || (将两个列的字符进行拼接)(可拼接多个,且后面可以跟where子句)

select str1,str2

        str1 || str2 AS 别名

from 表名 

字符串长度 LENGTH(计算某列的字符串长度)

select str1,

        length(str1) AS 别名

from 表名

小写转换 LOWER 

select str1,

        lower(str1) AS 别名

from 表名

大写转换 UPPER

select str1,

        upper(str1) AS 别名

from 表名

字符串替换 REPLACe(对象字符串,替换前的字符串,替换后的字符串) (有可能出现的情况是对象字符串里没有替换前的字符串,这样就不要替换)

select str1,str2,str3,

        replace(str1,str2,str3) AS 别名

from 表名

字符串的截取 SUBSTRING (对象字符串 FROM 截取的起始位置 FOR 截取的字符数)

select str1,

        substring(str1, FROM 3 FOR 2)AS 别名

from 表名

日期函数

返回当前日期 CURRENT_DATE   

select current_date 

返回当前时间 CYRRENT_TIME

select current_time

返回当前时间和日期 CURRENT_TIMESTAMP

select current_timestamp

类型转换

类型转换CAST(转换前的值 AS 想要转换的数据类型)

将null转换为其他值 COALESCE(数据1,数据2,数据3...) 

谓词就是返回值为真值的函数

LIKE谓词---字符串的部分一致查询

前方一致查询 (查询在某列中前面是ddd的内容)

select * from 表名 where 列名 LIKE 'ddd%

后方一致查询(查询在某列中后面是ddd的内容)

select * from 表名 where 列名 LIKE '%ddd

中间一致查询(查询在某列中含有ddd的内容,可以是前面,也可以是后面)

select * from 表名 where 列名 LIKE '%ddd%

BETWEEN谓词---范围查询(包含范围)

select product_name,sale_price

        from product

        where sale_price BETWEEN 100 AND 1000 

IS NULL,IS NOT NULL ---判断是否为空

select product_name,purchase_price

        from product

        where purchase_price IS NULL(IS NOT NULL)  

IN 谓词

简单使用(查询价格是320,500,1000的商品)

select product_name,purchase_price

        from product

        where purchase_price IN (320,500,1000) 

使用子查询作为IN的参数

select product_name, sale_price

        from product

        where product_id (NOT)IN (select product_id

                                                from shopproduct

                                                where shop_id = '000C')

EXIST谓词

理解:实际上不使用exist也可以用in代替

作用:判断是否存在满足某种条件的记录,使用关联子查询作为参数

select product_name, sale_price

        from product AS P1

        where exist (select *

                                        from shopproduct AS P2

                                        where P2.shop_id = '000A'

                                        AND P2.product_id = P1.product_id) 

注意:

ELSE可以省略,END不能省略

表达式:

CASE       WHEN <求值表达式> THEN <表达式>

                 WHEN <求值表达式> THEN <表达式>

                 WHEN <求值表达式> THEN <表达式>

                ...

                ELSE <表达式>

END

集合运算注意事项:

1.作为运算对象的记录的列数必须相同

2.作为运算对象的记录的列的类型必须一致

3.可以使用任何SELECt语句,但ORDER BY子句只能在最后使用一次

UNIOn ---表的加法(将两张表里面的数据合并到一张表;且自动消除重复数据;在NUION后面加上ALL就不会消除重复的数据;将UNIOn替换成INTERSECT,则会将重复的数据显示出来;EXCEPT则将一张表中有关另一张表单数据减去,显示剩下的数据,减数和被减数的位置不同,得到的结果也不同)

select product_id,product_name

        from product

UNIOn

select product_id,product_name

        from product2

进行联结时需要在FROM子句中使用多张表

SELECt子句中的列需要按照"<表的别名>"."<列名>"的格式进行书写

外联结指定主表的关键字是LEFT和RIGHT.使用LEFT时FROM子句中写在左侧的是主表,使用RIGHT时右侧的是主表

进行内联结是必须使用ON子句,并且要书写在FROM和WHERe之间

外联结取出的是表单所有数据,根据主表来排列,主表里面没有的数据用null表示.与内联结不同,内联结取出的是我们想要获得的数据

内联结(INNER JOIN ... ON)

select SP.shop_id,SP.shop_name,SP.product_id,P.product_name,P.sale_price

        from ShopProduct AS SP INNER JOIN Product AS P

        ON SP.product_id = P.product_id 

        WHERe SP.Product_id = '000A'

三表内联结

select SP.shop_id,SP.shop_name,SP.product_id,P.product_name,P.sale_price,IP.inventory_quantity

        from shopproduct AS SP INNER JOIN product AS P

        ON SP.product_id = P.product_id

                INNER JOIN inventoryproduct AS IP

                ON SP.product_id = IP.product_id

where IP.inventory_id = 'P001'

外联结 (RIGHT/LEFT OUTER JOIN ... ON)

select SP.shop_id,SP.shop_name,SP.product_id,P.product_name,P.sale_price

        from ShopProduct AS SP RIGHT OUTER JOIN Product AS P

        ON SP.product_id = P.product_id 

交叉联结(CROSS JOIN 笛卡尔积形式联结)

select SP.shop_id,SP.shop_name,SP.product_id,P.product_name

        fromshopproduct AS SP CROSS JOIN product AS P 

传送门

本文地址:http://dgaty.xhstdz.com/news/3009.html    物流园资讯网 http://dgaty.xhstdz.com/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

 
 
更多>同类最新文章
0相关评论

文章列表
相关文章
最新动态
推荐图文
最新文章
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号