首页 > 数据库 >SQL语句的基本理解与应用

SQL语句的基本理解与应用

时间:2024-11-08 23:17:12浏览次数:6  
标签:语句 name column UserId 理解 SQL table WHERE Id

        首先借用Freesql的官方文档中的一段复杂代码举例,说明SQL语句的基本使用并最终实现读懂下列的复杂代码

INSERT INTO [Role]([Name]) OUTPUT INSERTED.[Id] as [Id], INSERTED.[Name] as [Name] VALUES(N'role1'), (N'role2')
INSERT INTO [User]([Name]) OUTPUT INSERTED.[Id] as [Id], INSERTED.[Name] as [Name] VALUES(N'user1')
INSERT INTO [UserExt]([UserId]) VALUES(1)
INSERT INTO [UserExtRemarks]([RemarkId], [UserId], [Remark]) VALUES('6570e3f8-a226-c3ac-00d1-a3dd18b30339', 1, N'remark1'), ('6570e3f8-a226-c3ac-00d1-a3de16d9aa68', 1, N'remark2')
INSERT INTO [UserClaim]([UserId], [ClaimName]) OUTPUT INSERTED.[Id] as [Id], INSERTED.[UserId] as [UserId], INSERTED.[ClaimName] as [ClaimName] VALUES(1, N'claim1'), (1, N'claim2'), (1, N'claim3')
INSERT INTO [UserRole]([UserId], [RoleId]) VALUES(1, 5), (1, 6)

INSERT INTO [Role]([Name]) OUTPUT INSERTED.[Id] as [Id], INSERTED.[Name] as [Name] VALUES(N'role111100001'), (N'role2')
INSERT INTO [UserClaim]([UserId], [ClaimName]) OUTPUT INSERTED.[Id] as [Id], INSERTED.[UserId] as [UserId], INSERTED.[ClaimName] as [ClaimName] VALUES(1, N'claim0000')
INSERT INTO [UserRole]([UserId], [RoleId]) VALUES(1, 7), (1, 8)
DELETE FROM [UserRole] WHERE ([UserId] = 1 AND [RoleId] = 6)
DELETE FROM [UserRole] WHERE ([UserId] = 1 AND [RoleId] = 5)
DELETE FROM [UserClaim] WHERE ([Id] = 2)
UPDATE [User] SET [Name] = N'user1111'
WHERE ([Id] = 1)
UPDATE [UserClaim] SET [ClaimName] = CASE [Id]
WHEN 1 THEN N'claim1111'
WHEN 3 THEN N'claim3222222' END
WHERE ([Id] IN (1,3))

DELETE FROM [UserRole] WHERE (([UserId] = 1 AND [RoleId] = 7) OR ([UserId] = 1 AND [RoleId] = 8))
DELETE FROM [UserClaim] WHERE ([Id] IN (1,3,4))
DELETE FROM [UserExt] WHERE ([UserId] = 1)
DELETE FROM [User] WHERE ([Id] = 1)

        为了便于理解可以将语句拆分成很多部分,例如这两句将Value为role1和role2的值插入进Role的表和将Value为user1的值插入进User的表,并output出插入的id和name

INSERT INTO [Role]([Name]) OUTPUT INSERTED.[Id] as [Id], INSERTED.[Name] as [Name] VALUES(N'role1'), (N'role2')
INSERT INTO [User]([Name]) OUTPUT INSERTED.[Id] as [Id], INSERTED.[Name] as [Name] VALUES(N'user1')

        下面的SQL语句实现了将值为1的UserId插入进UserExt中和将([RemarkId], [UserId], [Remark])的值为('6570e3f8-a226-c3ac-00d1-a3dd18b30339', 1, N'remark1'), ('6570e3f8-a226-c3ac-00d1-a3de16d9aa68', 1, N'remark2')的两组插入进表UserExtRemarks中,其他INSERT语句含义相似,所以不再过多解释

INSERT INTO [UserExt]([UserId]) VALUES(1);

INSERT INTO [UserExtRemarks]([RemarkId], [UserId], [Remark]) 
VALUES('6570e3f8-a226-c3ac-00d1-a3dd18b30339', 1, N'remark1'), 
      ('6570e3f8-a226-c3ac-00d1-a3de16d9aa68', 1, N'remark2');

        下面的SQL语句实现了DELETE的操作,在UserRole表中将UserId为1,RoleId为5和6的值删除

DELETE FROM [UserRole] WHERE ([UserId] = 1 AND [RoleId] = 6)
DELETE FROM [UserRole] WHERE ([UserId] = 1 AND [RoleId] = 5)

        UPDATE语句主要实现的是SQL语句中的更新操作,例如下面的一句,将User表中的ID为1的项的name改为user1111,同理下面是将UserClaim表中Id为1和3的Claimname分别改为claim1111和claim3222222

UPDATE [User] SET [Name] = N'user1111'
WHERE ([Id] = 1)
UPDATE [UserClaim] SET [ClaimName] = CASE [Id]
WHEN 1 THEN N'claim1111'
WHEN 3 THEN N'claim3222222' END
WHERE ([Id] IN (1,3))

        下面同样是SQL语句中的DELETE语句,执行删除,依靠where找到条件

DELETE FROM [UserRole] WHERE (([UserId] = 1 AND [RoleId] = 7) OR ([UserId] = 1 AND [RoleId] = 8));
DELETE FROM [UserClaim] WHERE ([Id] IN (1,3,4));
DELETE FROM [UserExt] WHERE ([UserId] = 1);
DELETE FROM [User] WHERE ([Id] = 1

 下面是一些基础语法SQL SELECT DISTINCT 语句 | 菜鸟教程SQL 快速参考其中摘取了一些

  • SELECT - 从数据库中提取数据
  • UPDATE - 更新数据库中的数据
  • DELETE - 从数据库中删除数据
  • INSERT  - 向数据库中插入新数据
  • WHERE - 用于条件过滤数据
  • ALTER  - 修改数据库或数据库表
  • CREATE - 创建新数据库或表
  • ORDER BY - 排序方式,ASC 表示升序,DESC 表示降序
  • DROP  - 删除表
  • INNER JOIN - 连接数据表,分为left和right
  • AND OR NOT - 与 或 非
  • 语句语法
    AND / ORSELECT column_name(s)
    FROM table_name
    WHERE condition
    AND|OR condition
    ALTER TABLE (add column)ALTER TABLE table_name
    ADD column_name datatype
    ALTER TABLE (drop column)ALTER TABLE table_name
    DROP COLUMN column_name
    AS (alias for column)SELECT column_name AS column_alias
    FROM table_name
    AS (alias for table)SELECT column_name
    FROM table_name  AS table_alias
    BETWEENSELECT column_name(s)
    FROM table_name
    WHERE column_name
    BETWEEN value1 AND value2
    CREATE DATABASECREATE DATABASE database_name
    CREATE INDEXCREATE INDEX index_name
    ON table_name (column_name)
    CREATE TABLECREATE TABLE table_name
    (
    column_name1 data_type,
    column_name2 data_type,
    .......
    )
    CREATE UNIQUE INDEXCREATE UNIQUE INDEX index_name
    ON table_name (column_name)
    CREATE VIEWCREATE VIEW view_name AS
    SELECT column_name(s)
    FROM table_name
    WHERE condition
    DELETE FROMDELETE FROM table_name
    (Note: Deletes the entire table!!)

    or

    DELETE FROM table_name
    WHERE condition

    DROP DATABASEDROP DATABASE database_name
    DROP INDEXDROP INDEX table_name.index_name
    DROP TABLEDROP TABLE table_name
    GROUP BYSELECT column_name1,SUM(column_name2)
    FROM table_name
    GROUP BY column_name1
    HAVINGSELECT column_name1,SUM(column_name2)
    FROM table_name
    GROUP BY column_name1
    HAVING SUM(column_name2) condition value
    INSELECT column_name(s)
    FROM table_name
    WHERE column_name
    IN (value1,value2,..)
    INSERT INTOINSERT INTO table_name
    VALUES (value1, value2,....)

    or

    INSERT INTO table_name
    (column_name1, column_name2,...)
    VALUES (value1, value2,....)

    LIKESELECT column_name(s)
    FROM table_name
    WHERE column_name
    LIKE pattern
    ORDER BYSELECT column_name(s)
    FROM table_name
    ORDER BY column_name [ASC|DESC]
    SELECTSELECT column_name(s)
    FROM table_name
    SELECT *SELECT *
    FROM table_name
    SELECT DISTINCTSELECT DISTINCT column_name(s)
    FROM table_name
    SELECT INTO
    (used to create backup copies of tables)
    SELECT *
    INTO new_table_name
    FROM original_table_name

    or

    SELECT column_name(s)
    INTO new_table_name
    FROM original_table_name

    TRUNCATE TABLE
    (deletes only the data inside the table)
    TRUNCATE TABLE table_name
    UPDATEUPDATE table_name
    SET column_name=new_value
    [, column_name=new_value]
    WHERE column_name=some_value
    WHERESELECT column_name(s)
    FROM table_name
    WHERE condition

        下面是一些常用的基本SQL语句的基本含义

create database; 创建数据库

use database; 打开数据库

SELECT * FROM table; 将选择表中全部数据,其中*可以被用作通配符,表示全部的列的含义,以下是一个典型的SQL语句SELECT,表示从table_name中选取column1等字段名称及选择的条件

SELECT column1, column2, ...
FROM table_name
[WHERE condition]
[ORDER BY column_name [ASC | DESC]]
[LIMIT number];

        SELECT DISTINCT,指选取表内的不重复值,如有多个相同值,则只显示单个不同的值

        WHERE 作为一个前置条件出现,限制了SQL语句的执行条件,基本运算符都可以使用,其中三个特殊的字符为:

BETWEEN在某个范围内
LIKE搜索某种模式
IN指定针对某个列的多个可能值

        使用MySQL自带的数据库表city查询其中population在100000到110000之间的city,其中and表示范围之内

SELECT * FROM `city` WHERE Population BETWEEN 100000 and 110000

        查询结果为,代码正常运行

27    Emmen    NLD    Drenthe    105853
28    Zwolle    NLD    Overijssel    105819
29    Ede    NLD    Gelderland    101574
49    Béchar    DZA    Béchar    107311
50    Tiaret    DZA    Tiaret    100118
142    Townsville    AUS    Queensland    109914
165    Brahmanbaria    BGD    Chittagong    109032
166    Tangail    BGD    Dhaka    106004
167    Jamalpur    BGD    Dhaka    103556
168    Pabna    BGD    Rajshahi    103277
169    Naogaon    BGD    Rajshahi    101266
181    Schaerbeek    BEL    Bryssel    105692
182    Namur    BEL    Namur    105419
189    Parakou    BEN    Borgou    103577
205    Francistown    BWA    Francistown    101805

        同时,and还可以作为表示与的条件进行使用,表示countrycode = nld 的同时,population > 105000的全部city

SELECT * FROM `city` WHERE CountryCode = 'NLD' AND Population > 105000

        order by 可作为排序,如下表示按人口降序排序

SELECT * FROM `city` ORDER BY Population DESC

         该语句实现了查询users表内的第一个成员,并返回name和password

SELECT `name`,`password`
FROM users
LIMIT 1;

        按population升序,选择前50的city

SELECT * FROM city
ORDER BY Population ASC
LIMIT 50

         在user表中插入一个name 为sawaa,password 为111的用户,实现了插入功能

INSERT INTO users (`name` , `password`)
VALUES ('sawaa' , 111)

          新建了一个数据库表,users,其中表里新建了三条用户来实现基本的SQL功能,分别为:

1    sawaa    111
2    pvah    222
3    tailuo    333

        下面该语句实现了基本的更新

UPDATE users
SET name = 'Lihua' , `password` = 192
WHERE id = 3

        运行后结果为

3    Lihua    192
2    pvah    222
1    sawaa    111

        


DELETE FROM users WHERE `name` = 'Lihua'

        该代码实现了删除user中名字为Lihua的用户

        下面是很重要的模糊查询,主要用%符号表示,下列代码主要实现了查询city中所有name里含有ta字段的项目

SELECT * FROM city
WHERE `Name` LIKE '%ta%'

        输出结果为

Zaanstad    NLD    Noord-Holland    135621
Willemstad    ANT    Curaçao    2345
Constantine    DZA    Constantine    443727
Mostaganem    DZA    Mostaganem    115212
Tafuna    ASM    Tutuila    5200

SELECT * FROM city
WHERE `Name` LIKE 'ta%'

        这样写则是查询所有ta开头的项

SELECT * FROM city
WHERE `Name` LIKE 'ta_ _ _ _'

        同理这样写则是确定了字母的个数(没有空格)

        通配符直接借用菜鸟教程的表格SQL 通配符 | 菜鸟教程

通配符描述
%替代 0 个或多个字符
_替代一个字符
[charlist]字符列中的任何单一字符
[^charlist]

[!charlist]
不在字符列中的任何单一字符

        下面的 SQL 语句选取 name 以 A 到 H 字母开头的city

SELECT * FROM city
WHERE name REGEXP '^[A-H]';

        同理,下面的 SQL 语句选取 name 不为以 A 到 H 字母开头的city


SELECT * FROM city
WHERE name REGEXP '^[^A-H]';

        IN 操作符允许在 WHERE 子句中规定多个值。

SELECT * FROM city
WHERE name IN ('Qandahar' , 'Utrecht')

        并且可以同时应用

SELECT * FROM city
WHERE Population BETWEEN 100000 and 150000
AND CountryCode NOT IN ('AFG' , 'NLD')

        

标签:语句,name,column,UserId,理解,SQL,table,WHERE,Id
From: https://blog.csdn.net/hhn6666/article/details/143584698

相关文章

  • 1.存储引擎:深入解析 MySQL 存储引擎与 InnoDB 文件结构
    MySQL提供了多种存储引擎,适用于不同的业务场景。每种引擎在文件结构上设计独特,以便优化性能和功能。本文将详细介绍MySQL中常用存储引擎的文件结构,尤其是InnoDB引擎的多种文件类型及其作用,以帮助更深入地理解和选择适合的存储引擎。一、MySQL存储引擎概述与常用存储......
  • 2. MySQL 索引分类
    MySQL中的索引是提高数据查询速度的重要工具,就像一本书的目录,可以帮助我们快速定位到所需的内容。选择适合的索引类型对数据库设计和性能优化至关重要。本文将详细介绍MySQL中常见的索引类型,并重点讲解聚集索引和二级索引的概念及应用。1.主键索引(PrimaryKeyIndex)概......
  • Oracle 存储过程分页 + Sqlsugar调用
    一、Oracle存储过程分页1createPROCEDUREGetPatientVisitData(2p_HospIdINVARCHAR2,--院区编码3p_strDateINVARCHAR2,--开始日期4p_endDateINVARCHAR2,--结束日期5p_page_sizeINNUMBER,--每页记录数6p_page_numberIN......
  • 原木、实木和家具是常见的木材相关术语,它们之间有一定的区别,但容易让人混淆。下面我将
    原木、实木和家具是常见的木材相关术语,它们之间有一定的区别,但容易让人混淆。下面我将为你详细解释如何区分这三者以及它们的不同之处,帮助你更好地理解和区分这些概念。1. 原木(RawWood)定义:原木是指直接从树木中砍下来的粗大木材,未经任何加工。它通常是树干或大树枝,外形不规则,......
  • 【GreatSQL 优化器 - 01】const_table
    一、const_table介绍GreatSQL的优化器主要用JOIN类来进行处理SQL语句的,JOIN类有以下四个table数量相关的成员变量。其中const_tables是optimize最开始就检查并且标识的,因为这样可以把记录最少的表放在执行计划的第一步,在后面的执行计划里面这些consttables是不参......
  • day03 运算符-分支语句
    今日内容运算符分支语句教学目标能够知道哪些运算中发生了隐式转换能够知道如何对数据进行强转能够使用自增自减运算符并知道在前在后的区别能够使用关系运算符完成数据的比较能够掌握不同逻辑运算符的运算规则能够掌握三元运算符的格式和执行流程能够运用小扩号......
  • 关于MySQL表设计,测试人员可以关注哪些点
    测试人员关注数据库表设计是“测试左移”的一种手段,可以把有关数据库的潜在bug消灭在系统测试之前,从而提高交付效率。以MySQL为例,QA可从以下方面对数据库表设计做测试的左移:1、数据表功能表结构确保每张表都有主键,且主键值唯一且非空,以保证表中每行数据的唯一性和可识别性检......
  • mysql ubuntu 卸载
    mysql卸载:引用https://developer.aliyun.com/article/1306777在Ubuntu系统中,MySQL是一种常用的关系型数据库服务器。有时,我们可能需要完全卸载MySQL服务器,包括所有配置文件和数据,以便重新安装或切换到其他数据库服务器。本文将详细介绍在Ubuntu中如何完全卸载MySQL服......
  • MySQLMonitor: 黑盒测试Mysql实时监控辅助工具
    MySQLMonitorMySQL实时监控工具(代码审计、黑盒测试辅助工具)使用1.自行打包使用gitclonehttps://github.com/fupinglee/MySQLMonitorcdMySQLMonitormvncleanpackage-DskipTests=true打开target下的jar文件即可执行2.直接下载使用https://github.com/fupinglee/......
  • 初始mysql以及创建
    mysql是一个客户端服务器结构的程序mysql的服务器是真正的本体,负责保存和管理数据,数据都是保存在硬盘上数据库服务器上可以把很多有业务上联系的表放在一起,构成一个逻辑上的数据集合 登陆mysql打开终端输入mysql-uroot-p,然后显示这个就说明mysql客户端连接到了服务器 ......