SQL基础语法 | 增删改查、分组、排序、limit

这篇具有很好参考价值的文章主要介绍了SQL基础语法 | 增删改查、分组、排序、limit。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、数据库层面(shell命令行)

  1. 创建数据库

    postgres=# CREATE DATABASE school;
    
  2. 查看数据库

    postgres=# \l
    
  3. 选择数据库

    postgres=# \c school
    
  4. 删除数据库

    postgres=# DROP DATABASE school;
    

二、表格层面(Navicat)

  1. 创建表格

    CREATE TABLE table_name(
       字段名称 字段数据类型,
       column2 datatype,
       column3 datatype,
       .....
       columnN datatype,
       PRIMARY KEY( 一个或多个列 )
    );
    
  2. 删除表格

    DROP TABLE table_name;
    
  3. 创建schema模式

    CREATE SCHEMA myschema.表名(
       ID   INT              NOT NULL,
       NAME VARCHAR (20)     NOT NULL,
       AGE  INT              NOT NULL,
       ADDRESS  CHAR (25),
       SALARY   DECIMAL (18, 2),
       PRIMARY KEY (ID)
    );
    
  4. 删除schema模式

    • 删除一个空模式

      DROP SCHEMA myschema;
      
    • 删除一个模式及包含的所有对象

      DROP SCHEMA myschema CASCADE;
      

三、增删改查

1. 增insert into

sql语法

INSERT INTO TABLE_NAME (字段名1, column2, column3,...columnN) VALUES (value1, value2, value3,...valueN)

INSERT INTO TABLE_NAME (字段名1, column2, column3,...columnN)
VALUES (value1, value2, value3,...valueN);
// 举例
INSERT INTO book(id,name,age)VALUES(1,'张一山',24);
INSERT INTO book values (2,'王祖蓝',23);
INSERT INTO book values (3,'李一同');
INSERT INTO book values (4,'吴晓非');
INSERT INTO book values (5);
INSERT INTO book values (6,24);
// 遵循顺序对应
// 下面是结果
1	张一山	24
2	王祖蓝	23
3	李一同	null
4	吴晓非	null
5    null   null
6	 24     null

2. 查询select

SQL语法:

SELECT column1, column2,...columnN FROM table1 where 条件;

// 查询所有字段使用*;
SELECT * FROM book
// 查询系统当前时间
SELECT CURRENT_TIMESTAMP; 

3. UPDATE 改

sql语法:

UPDATE table_name SET column1 = value1, column2 = value2...., columnN = valueN WHERE [condition];

UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];

// 修改name=lcy字段的年龄age为16

UPDATE company SET age=16 WHERE name='lcy';

// 若不加where条件则 修改某个字段下的所有内容

UPDATE company set salary=13000, age=18

1 paul 18 加拿大 13000.00 2023-07-05
2 allen 18 纽约 13000.00 2023-07-20
3 teddy 18 加利福尼亚 13000.00 2023-07-06
4 mark 18 旧金山 13000.00 2023-07-07
5 ming 18 曼彻斯特 13000.00 2023-07-08
8 zx 18 北京 13000.00 2023-07-15
7 lqq 18 陕西 13000.00 2023-07-10
6 james 18 曼哈顿 13000.00 2023-07-09

// 和IN连用

UPDATE company set salary=19000,age=19 WHERE id IN(1,2,3)

// 和like连用

UPDATE company set salary=700,age=19 WHERE name like '%y'

5 ming 18 曼彻斯特 13000.00 2023-07-08
6 james 18 曼哈顿 13000.00 2023-07-09
1 paul 19 加拿大 19000.00 2023-07-05
2 allen 19 纽约 19000.00 2023-07-20
4 mark 21 旧金山 11000.00 2023-07-07
7 lqq 19 陕西 700.00 2023-07-10
8 zx 19 北京 700.00 2023-07-15
3 teddy 19 加利福尼亚 700.00 2023-07-06

4. DELETE 删除

delete删除表的内容,drop删除表的结构
sql语法:

DROP TABLE 表名;
TRUNCATE TABLE 表名

语法:DELETE FROM table_name WHERE [condition];

// 条件删除

DELETE FROM company WHERE name='james'

// 删除表里所有内容

DELETE FROM company

区别:
使用 TRUNCATE TABLE 表名=DELETE FROM company但是前者不会产生日志

四、 关键字

1. AND

AND 表示多个条件必须同时成立

找出 AGE(年龄) 字段大于等于 25,并且 SALARY(薪资) 字段大于等于 16000 的数据:
SELECT * FROM company WHERE age>=25 AND salary >= 16000

2.OR

OR 表示示多个条件中只需满足其中任意一个即可

找出 AGE(年龄) 字段大于等于 25,或者 SALARY(薪资) 字段大于等于 26000 的数据:SELECT * FROM company WHERE age>=25 OR salary >= 26000

3. NOT NULL 和 NULL

在公司表中找出 AGE(年龄) 字段不为空/为空的记录:
SELECT * FROM company WHERE age IS NOT NULL;
SELECT * FROM company WHERE age IS NULL;

4. LIKE 模糊查询

模糊查询就需要用到like操作符。另外还有两个通配符。

①%通配符。%表示出现任意字符,出现的字符数可以是0,1,无数。

②_ 通配符。_ 表示出现有且仅有一次字符。

  • 如果没有使用以上两种通配符,LIKE 子句和等号 = 得到的结果是一样的。

在 PostgreSQL 中,LIKE 子句是只能用于对字符进行比较,因此在下面例子中,我们要将整型数据类型转化为字符串数据类型。

实例 描述
WHERE SALARY::text LIKE ‘200%’ 找出 SALARY 字段中以 200 开头的数据。
WHERE SALARY::text LIKE ‘%200%’ 找出 SALARY 字段中含有 200 字符的数据。
WHERE SALARY::text LIKE ‘_00%’ 找出 SALARY 字段中在第二和第三个位置上有 00 的数据。
WHERE SALARY::text LIKE ‘2_%_%’ 找出 SALARY 字段中以 2 开头的字符长度大于 3 的数据。
WHERE SALARY::text LIKE ‘%2’ 找出 SALARY 字段中以 2 结尾的数据
WHERE SALARY::text LIKE ‘_2%3’ 找出 SALARY 字段中 2 在第二个位置上并且以 3 结尾的数据
WHERE SALARY::text LIKE ‘2___3’ 找出 SALARY 字段中以 2 开头,3 结尾并且是 5 位数的数据

如:在 COMPANY 表中找出 NAME(名字) 字段中以 Pa 开头的的数据:

SELECT * FROM company WHERE name like 'pa%';//以pa开头的
SELECT * FROM company WHERE name like '%l%';// name中含有字母l的
SELECT * FROM company WHERE name like '%l';//以字母l结尾的

当我们大概知道name后面有一个字符,前面有一个字符的时候,我们就可使用_

SELECT * FROM company WHERE name like '_z_';

4.1 like查找非字符类型

// 查询年龄=19的
SELECT * FROM company WHERE age::TEXT like '19'
1 paul 19 加拿大 19000.00 2023-07-05
2 allen 19 纽约 19000.00 2023-07-20
7 lcx 19 陕西 700.00 2023-07-10

// 查询年龄以2开头的
SELECT * FROM company WHERE age::TEXT like '2_'
// 查询工资以19开头的
SELECT * FROM company WHERE salary::TEXT like '19%'

5. IN 包含

比如使用or时:薪水在where salary = 10000 or 20000时,就可以使用in子句
SELECT * FROM company WHERE salary=17000 OR salary=19000;
现在我们可以直接使用IN子句:可以是1个或多个
SELECT * FROM company WHERE salary in(17000,19000,12000);
SELECT * FROM company WHERE salary in(28000);

5.2 NOT IN

刚好和IN相反

6. BETWEEN 和 AND 的联合使用 包含两个端点值

// 找出工资在4500到9000之间的
SELECT * FROM "company" WHERE salary BETWEEN 4500 AND 9000;

7. LIMIT

主要用于分页查询 一般分页关键字放在最后的

limit 子句用于限制 SELECT 语句中查询的数据的数量。

基本语法:

SELECT column1, column2 FROM table_name LIMIT [no of rows]

举例:
// 返回四个数据
SELECT * FROM company LIMIT 4
// 返回四个数据并按照id排序
SELECT * FROM company ORDER BY id LIMIT 4

8. OFFSET

  • 概念:OFFSET 偏移量(初始偏移量为0)offset 1 :意思就是从第2行开始
    注:LIMIT x OFFSET y 是为了与PostgreSQL兼容, 查询出的数据结果集为 [y+1,x+y]。

  • offset使用: offset x

  • sql语法:

    // 从x+1行开始 取数据
    SELECT * FROM "company" OFFSET 1从第二行开始取数据 含x+1行的数据

  • 配合limit使用

    // 全部数据

    5 ming 18 曼彻斯特 13000.00 2023-07-08
    1 paul 19 加拿大 19000.00 2023-07-05
    2 allen 19 纽约 19000.00 2023-07-20
    4 mark 21 旧金山 11000.00 2023-07-07
    7 lcx 19 陕西 700.00 2023-07-10
    8 zx 19 北京 700.00 2023-07-15
    3 teddy 19 加利福尼亚 700.00 2023-07-06
    6 ljj 28 shanxi 900.00 2023-07-19

    // 从第2行开始,取4行数据

    SELECT * FROM "company" LIMIT 4 OFFSET 1

    1 paul 19 加拿大 19000.00 2023-07-05
    2 allen 19 纽约 19000.00 2023-07-20
    4 mark 21 旧金山 11000.00 2023-07-07
    7 lcx 19 陕西 700.00 2023-07-10

9. ORDER BY

  • 概念:排序, 一般配合where子句一起使用

  • 基础语法

    SELECT column-list
    FROM   table_name
    [WHERE condition]
    [ORDER BY column1, column2, .. columnN] [ASC | DESC];
    
    
  • 默认是升序排序 即 order by column asc,若想改成降序则使用 desc

    // 按照id降序排序
    SELECT * FROM company ORDER BY id desc

10. GROUP BY :

  • 基础知识:分组,配合select使用 和聚合函数使用

    GROUP BY子句通常与聚合函数一起用于统计数据。
    GROUP BY子句将行排列成组,聚合函数返回每个组的统计量。

    • 概念:

      目的GROUP BY 语句和 SELECT 语句一起使用,用来对相同的数据进行分组。

      位置:GROUP BY 在一个 SELECT 语句中,放在 WHRER 子句的后面,ORDER BY 子句的前面。

      SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;

    • 语法:

      SELECT column-list
      FROM table_name
      WHERE [ conditions ]
      GROUP BY column1, column2....columnN
      
    • 使用 group by 时 只能select 出 分组字段和聚合函数

    • 举例

      // 全部

      5 ming 18 曼彻斯特 13000.00 2023-07-08
      1 paul 19 加拿大 19000.00 2023-07-05
      2 allen 19 纽约 19000.00 2023-07-20
      4 mark 21 旧金山 11000.00 2023-07-07
      7 lcx 19 陕西 700.00 2023-07-10
      8 zx 19 北京 700.00 2023-07-15
      3 teddy 19 加利福尼亚 700.00 2023-07-06
      6 ljj 28 shanxi 900.00 2023-07-19

      // 根据name进行分组,并且找出每个人的工资总额

      SELECT name,SUM(salary) FROM company GROUP BY name

      teddy 700.00
      allen 19000.00
      ljj 900.00
      lcx 700.00
      paul 19000.00
      ming 13000.00
      mark 11000.00
      zx 700.00

10.1 何为分组

目前我们表中的数据人名都是一个,我们现在往表中加入几条数据

1 paul 19 加拿大 19000.00 2023-07-05
2 allen 19 纽约 19000.00 2023-07-20
4 mark 21 旧金山 11000.00 2023-07-07
7 lcx 19 陕西 700.00 2023-07-10
8 zx 19 北京 700.00 2023-07-15
3 teddy 19 加利福尼亚 700.00 2023-07-06
6 ljj 28 shanxi 900.00 2023-07-19
9 paul 24 Houston 20000.00 2023-07-11
10 James 44 Norway 5000.00 2023-07-19
11 James 45 Texas 5000.00 2023-07-20

再次进行一次分组看
SELECT name,SUM(salary) FROM company GROUP BY name

teddy 700.00
allen 19000.00
James 10000.00
ljj 900.00
lcx 700.00
paul 39000.00
ming 13000.00
mark 11000.00
zx 700.00
发现james和paul已经进行了合并相加

// 根据name进行分组,并且找出每个人的工资总额,根据工资总额进行排序

SELECT name,SUM(salary) FROM company GROUP BY name ORDER BY SUM(salary)

teddy 700.00
lcx 700.00
zx 700.00
ljj 900.00
mark 11000.00
ming 13000.00
paul 19000.00
allen 19000.00

// 根据name进行分组,并且找出每个人的工资总额,且筛选出年龄大于20的数据,最后根据工资总额进行排序

SELECT name,SUM(salary) FROM company WHERE age>20 GROUP BY name ORDER BY SUM(salary)

ljj 900.00
mark 11000.00

11. HAVING 用来筛选分组后的各项数据

  • 基础语法:HAVING 是在由 GROUP BY 子句创建的分组基础上设置条件,所以要放在group by后面

     SELECT column1, column2
     FROM table1
     WHERE [ conditions ]
     GROUP BY column1, column2
     HAVING [ conditions ]
     ORDER BY column1, column2
    
  • 位置:

    AVING 子句必须放置于 GROUP BY 子句后面,ORDER BY 子句前面

  • 举例

    // 找出根据 NAME 字段值进行分组,并且 name(名称) 字段的计数少于 2 数据

    select name from company group by name having count(name) < 2

    teddy
    allen
    ljj
    lcx
    ming
    mark
    zx

    // 找出根据 NAME 字段值进行分组,并且 name(名称) 字段的计数大于 1 数据

    select name from company group by name having count(name) > 1

    James
    paul
    其他: SELECT id,salary FROM company GROUP BY salary,id HAVING MAx(age)>23 ORDER BY id

12. DISTINCT 去重复 与select连用

  • 概念:

    DISTINCT 关键字与 SELECT 语句一起使用,用于去除重复记录,只获取唯一的记录

  • 基础语法
    SELECT DISTINCT column1, column2,.....columnN FROM table_name WHERE [condition]

  • 举例
    剔除company中重复的name 我们可以在结果中看到去掉了重复的james和paul

SELECT DISTINCT name FROM company

teddy
allen
James
ljj
lcx
paul
ming
mark
zx文章来源地址https://www.toymoban.com/news/detail-607412.html

到了这里,关于SQL基础语法 | 增删改查、分组、排序、limit的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【postgresql 基础入门】分组查询 group by 子句的写法,分组条件过滤having子句的写法,多列的分组以及与join联合的多表分组

    ​ 专栏内容 : postgresql内核源码分析 手写数据库toadb 并发编程 个人主页 :我的主页 管理社区 :开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 本文主要分享在postgresql 数据库中对查询结果进行分组group by,以及对分组进行条件过滤having,同时对它

    2024年04月11日
    浏览(49)
  • Postgresql 基础使用语法

    1.数字类型 类型    长度     说明      范围    与其他db比较 Smallint 2字节 小范围整数类型 32768到+32767 integer 4字节 整数类型 2147483648到+2147483647 bigint 8字节 大范围整数类型 -9233203685477808到+9223203685477807 decimal 可变 用户指定 精度小数点前131072位;小数点后16383位 numeric

    2024年02月13日
    浏览(32)
  • MySQL 基本概念 基础用法 增删改查(特殊查询)语法 详细篇

    今天来分享一期MySQL的基本用法(增删改查 对库 对表 对值) 目录 MySQL的基础概念  SQL 语言的主要分类 DDL(数据定义语言) DML(数据操控语言) DQL(数据库查询语言) DCL(数据库控制语言) 基础语法 增 库的操作 表操作 列操作 值操作 删 删除库 删除表 删除值 改 修改表名 更新数

    2024年03月16日
    浏览(47)
  • 90天玩转Python—11—基础知识篇:Python自动化操作Excel:读写、增删改查、分组统计全攻略

    90天玩转Python—01—基础知识篇:C站最全Python标准库总结 90天玩转Python--02--基础知识篇:初识Python与PyCharm 90天玩转Python—03—基础知识篇:Python和PyCharm(语言特点、学习方法、工具安装) 90天玩转Python—04—基础知识篇:Python编程基础:标识符、保留字、注释、多行语句、p

    2024年04月11日
    浏览(43)
  • 【SQL基础】SQL增删改查基本语句

    增删改查是一个数据操作工具最基本的命令,在SQL中,这四种语句主要由以下语句执行: 增:insert 删:delete 改:update 查:select 功能:SELECT 语句用于从数据库中选取数据。 结果:选取结果被存储在一个结果表中,称为结果集。 语法:可以用以下语句选择特定列名,

    2023年04月08日
    浏览(33)
  • 面试之快速学习SQL-基础增删改查语句

    在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。 操作符 描述 引号的使用 请注意 , 我们在例子中的条件值周围使用的是单引号 。 SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用

    2024年02月14日
    浏览(31)
  • 一文读懂SQL的增删改查(基础教程)

             前言 一、一些最重要的 SQL 命令 二、查询(SELECT) 1、查询所有列 2、查询指定列 3、查询并去重 (DISTINCT ) 4、按条件查询where  5、SQL AND OR 运算符 6、SQL ORDER BY 7、SQL LIMIT 8、SQL LIKE 操作符 9、SQL IN 操作符 9、SQL BETWEEN 操作符 三、插入(INSERT INT

    2024年02月13日
    浏览(52)
  • postgresql中基础sql查询

    postgresql命令速查 SQL使用SELECT和FROM查询表中的数据, * 表示查询全部字段; PostgreSQL提供了无表查询的扩展,使用 AS 指定别名; 使用 DISTINCT 去除查询结果中的重复值; PostgreSQL 支持两种格式的代码注释。 PostgreSQL 使用 WHERE 子句过滤表中的数据; PostgreSQL 提供了以下比较运算

    2024年02月12日
    浏览(90)
  • SQL(八):SQL基础语法

    employee data (large dataset, includes data and test/verification suite) 什么是空值? 空值不同于零值或包含空格的字段,具有空值的字段是在创建记录时留空的字段 SQL 约束 用于限制可以进入表中的数据类型,约束可以是列级别,也可以是表级别(列级约束应用于一列;表级约束应用于整

    2024年02月13日
    浏览(40)
  • 【SQL】SQL Server基础语法

    安装SQL Server :进入官网下载 Developer 版本即可 SQL Server Management Studio:SSMS 集成开发环境 1. 创建 2. 使用 在进行数据定义、数据查询和数据更新等操作时要先确定 使用的数据库 3. 删除 1. 模式的定义与删除 2. 基本表的定义、修改与删除 🎈定义 常用数据类型如下: ✨修改 📙

    2024年02月06日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包