SQL命令

news2025/4/26 7:38:59

一、表的创建

SQL MS Access、MySQL 和 SQL Server 数据类型 | 菜鸟教程

SQL Server 和 MySQL 中的 Date 函数 | 菜鸟教程

1.1、创建表

CREATE TABLE Citys (
    CityID int PRIMARY KEY,
    CityName varchar(255)
);


CREATE TABLE Per (
    PersonID int PRIMARY KEY,                          /*主键约束*/
    LastName varchar(255) NOT NULL,                    /*非空约束*/
    FirstName varchar(255) UNIQUE,                     /*唯一约束*/
    Address varchar(255),
    City varchar(255) DEFAULT 'beijing',               /*默认值*/
    Sex varchar(255) CHECK (Sex IN ('man', 'weman')),  /*CHECK约束*/
    FOREIGN KEY (City) REFERENCES Citys(CityID)        /*声明外键*/

    /*CONSTRAINT fk_PerOrders FOREIGN KEY (City) REFERENCES Citys(CityID)
     *如果需要添加外键,并且为其命名,使用此语句*/

    /*CONSTRAINT chk_Per CHECK (PersonID > 0 AND Sex in('man', 'weman'))
     *需要定义多个列的约束,并未为器命名时*/

    /*CREATE INDEX IN_idx ON Per (PersonID);
     *为PersonID建立索引*/

    /*create unique index Name_idx on Per (FirstName);
     *为FirstName建立唯一索引(前提是FirstName是unique)*/

    /*PersonID int PRIMARY KEY auto_increment = start_value,
     *此语句将PersonID设置为自动增加,默认起始值为1,可以设置start_value指定起始值*/
);

1.2、添加、删除约束

/*NOT NULL - 指示某列不能存储 NULL 值*/
ALTER TABLE Per MODIFY PersonID int NOT NULL;   /*添加PersonID的not null约束*/
ALTER TABLE Per MODIFY PersonID int NULL;       /*删除PersonID的not null约束*/


/*UNIQUE - 保证某列的每行必须有唯一的值*/
ALTER TABLE Per ADD UNIQUE(PersonID);           /*添加PersonID的UNIQUE约束*/
ALTER TABLE Per DROP INDEX PersonID;            /*删除PersonID的UNIQUE约束*/

ALTER TABLE Per
ADD CONSTRAINT uc_PersonID UNIQUE (PersonID, LastName); /*定义多个列的UNION约束并为之命名*/
ALTER TABLE Per
DROP INDEX uc_PersonID;                                 /*删除该约束*/


/*PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录*/
ALTER TABLE Per ADD PRIMARY KEY (PersonID);         /*添加主键约束*/
ALTER TABLE Per DROP PRIMARY KEY;                   /*删除主键约束*/

ALTER TABLE Per
ADD CONSTRAINT pk_PersonID PRIMARY KEY (PersonID,LastName);  /*当主键由多个列组成时*/


/*FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性
 *一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)
 *FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一*/
ALTER TABLE Per                                     /*不需要起别名时*/
ADD FOREIGN KEY (city)
REFERENCES Citys(CityID);

alter table Per                                     /*外键由几列构成,并需要起别名时*/
add constrain for_city
foreign key (city)
references Citys(CityID);

alter table Per                                     /*删除外键约束*/
drop foreifn key for_city;


/*CHECK - 保证列中的值符合指定的条件*/
ALTER TABLE Per                                     /*增加check约束*/
ADD CHECK (PersonID > 0);

ALTER TABLE Per                                     /*对多个列进行检查并命名*/
ADD CONSTRAINT chk_Per CHECK (PersonID > 0 AND Sex in('man', 'weman'));

ALTER TABLE Per                                     /*删除check约束*/
DROP CHECK chk_Per;


/*DEFAULT - 规定没有给列赋值时的默认值*/
ALTER TABLE Per                                     /*设置City默认值*/
ALTER COLUMN City SET DEFAULT 'beijing';

alter table Per                                     /*删除City的默认值*/
alter column City drop default;


/*INDEX - 用于快速访问数据库表中的数据
 *用户无法看到索引,它们只能被用来加速搜索/查询
 *更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新
 *因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引*/

1.3、视图

/*视图本质上是一个虚拟的表,它并不存储数据,而是基于基础表的查询结果生成
 *因此,如果基础表的数据发生变化,视图的内容也会相应地更新*/

 /*创建视图*/
create view view_name as                
select column1, column2, … 
from table_name
where condition;

/*eg:*/
create view high_rank as 
select id, name, url, country 
from web 
where alexa <= 50;


/*不能通过update直接修改视图
 *因为视图存储的是SQL语句的结果集
 *当表中的数据变化时,会引起视图的变化*/
update table_name
set condition_column = new_value
where condition;

/*eg:*/
update web 
set alexa = 100 w
here name = 'QQ APP';


/*删除视图*/
drop view if exists view_name;

/*eg:*/
drop view if exists high_rank;

二、表的操作

2.1、开胃菜

2.1.1、where

where用于条件判断

2.1.2、having

having其实也是用于条件判断的,但是where不可以和聚合函数结合使用

注意,基于only_full_group_by模式,所有非聚合列均需要包含在group by当中

2.1.3、like

通常和通配符一起使用

常见的与like搭配使用的通配符:

  • %:0个或多个字符的占位符
  • _:一个字符的占位符

不和like搭配使用:

  • regexp '^[GFA]':匹配以G、F、A其中一者开头的字符串
  • regexp '^[^A-H]':匹配不以A-H开头的字符串,不区分大小写

2.1.4、in

用小括号将可能的取值括起来

2.1.5、between与or

between常常与and连用,用于获取介于某两者之间的内容

获得alexa介于[1, 20]直接的行的数据

or表示满足左右两个条件之一即可

2.1.6、order by

用于对输出结果按照某个列的值进行升序(asc)/降序(desc)的排序

2.1.7、limit

限制输出的行数

获取“select * from Websites where alexa between 1 and 20 order by alexa desc”结果的前三行

2.1.8、group by

运用1:统计 access_log 各个 site_id 的访问量:

运用2:多表查询

统计有记录的网站的记录数量

2.1.9、聚合函数

SQL 函数 | 菜鸟教程

2.1.10、ifNull函数

/*以下是leetcode-176第二高的薪水*/
select 
    ifnull(
        (select distinct salary 
        from Employee
        order by salary desc
        limit 1, 1)
        ,
        NULL
    )
    as SecondHighestSalary;

/*利用
 *       select distinct salary 
 *       from Employee
 *       order by salary desc
 *       limit 1, 1
 *求得的结果,进行ifnull(_,_)
 *如果其结果为空,则返回NULL
 *否则,返回第二高的薪水
 *limit 1, 1表示,只显示从第1行(第0行起算)开始,只显示一行*/

2.2、基本操作

2.2.1、select

SELECT 语句用于从数据库中选取数据

使用distinct可以保证输出是唯一的,即输出的内容不重复

/*输出部分列
 *distinct保证输出的唯一性*/
SELECT (distinct) column1, column2, ...
FROM table_name;


/*输出全部列*/
SELECT *
FROM table_name;

2.2.2、insert

插入数据,有默认值的、没有约束“not null”的属性可以不插入其值,但是其它的必须插入相应的值

/*无需指定列名*/
INSERT INTO table_name
VALUES (value1,value2,value3,...);

/*指定列名*/
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

2.2.3、update

更新某些满足条件的行的某些列

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

2.2.4、delete

DELETE FROM table_name
WHERE condition;

2.2.5、drop

/*撤销索引*/
DROP INDEX [IF EXISTS] index_name
ON TABLE_NAME;


/*撤销表*/
DROP TABLE [IF EXISTS] TABLE_NAME;


/*撤销数据库*/
DROP DATABASE [IF EXISTS] database_name;

2.2.6、alter

/*添加列*/
ALTER TABLE table_name
ADD column_name datatype


/*修改列的数据类型*/
ALTER TABLE table_name
MODIFY COLUMN column_name datatype


/*删除列*/
ALTER TABLE table_name
DROP COLUMN column_name

2.3、连接

用来操作的两个基本表:

2.3.1、inner join(jonin)

INNER JOIN 关键字在表中存在至少一个匹配时返回行,返回的是两个表中满足连接条件的交集,即同时存在于两个表中的数据。

2.3.2、left join

LEFT JOIN 关键字从左表返回所有的行,即使右表中没有匹配。如果右表中没有匹配,则结果为 NULL。

2.3.3、right join

RIGHT JOIN 关键字从右表返回所有的行,即使左表中没有匹配。如果左表中没有匹配,则结果为 NULL。

mysql不支持full outer join

2.3.4、合并结果集union

union:UNION 操作符用于合并两个或多个 SELECT 语句的结果集。使用 UNION 时,每个 SELECT 语句必须具有相同数量的列,且对应列的数据类型必须相似。如果要显示重复的行,则使用union all

2.4、复制数据

2.4.1、复制到未创建表

create new_tabel as old_table where conditions:从一个表复制满足一定条件的信息到另一个未创建的

2.4.2、复制到已存在的表

INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。

无法比较NULL和0,这两者是不等价的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2326691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

终端SSH连接工具SecureCRT安装和连接Linux

SecureCRT 9.5是一款集终端仿真与加密功能于一身的专业软件&#xff0c;其坚如磐石的安全性、高效的信息传输能力以及高度可定制的会话管理&#xff0c;使得它成为众多用户的首选。该软件不仅支持SSH2、SSH1、Telnet等多种协议&#xff0c;还提供了Relogin、Serial、TAPI、RAW等…

赛逸展2025“创新引擎”启动:限量席位,点亮科技绿色新征程

当今时代&#xff0c;科技革新与绿色发展已然成为推动社会进步的双引擎。2025第七届亚洲消费电子技术贸易展&#xff08;赛逸展&#xff09;敏锐捕捉这一趋势&#xff0c;重磅打造“科技创新专区”&#xff0c;并面向科技、绿色企业吹响限量招募号角。 这个独具特色的专区紧扣…

FPGA实现数码管显示分秒时间

目录 一. verilog实现 二. 烧录验证 三. 结果验证 使用开发板&#xff1a;DE2-115开发板 一. verilog实现 要实现分和秒&#xff0c;需要知道定时器的频率&#xff0c;通过查手册可知&#xff0c;我使用的开发板时钟为50hz&#xff0c;也就是时钟一个周期是2微秒。 5000000…

可视化开发:用Qt实现Excel级动态柱状图

Qt柱状图 QtChart 首先我们介绍一下 图表建立的基础&#xff1a;Qt Charts QtChart 是Qt框架的一个模块&#xff0c;专注与提供交互式数据可视化功能 俗话就是 用于用户轻松创建各种类型的图表和图形界面 它包含的图表类型有很多&#xff1a;折线图&#xff0c;饼图&#x…

从零实现Json-Rpc框架】- 项目实现 - 基于Dispatcher模块的RPC框架

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…

kubekey -实现懒人一键部署K8S集群

kubekey -实现懒人一键部署K8S集群 操作步骤 官网&#xff1a; https://kubesphere.io/zh/ 一、执行以下命令快速创建一个 Kubernetes 集群。 Master节点 如果您访问 GitHub/Googleapis 受限&#xff0c;请登录 Linux 主机&#xff0c;执行以下命令设置下载区域。 [roottest ~]…

李宏毅机器学习笔记(1)—机器学习基本概念+深度学习基本概念

机器学习基本概念 1、获取模型 步骤 1.1、假定未知函数 带未知参数的函数 1.2、定义损失函数 真实值&#xff1a;label MAE MSE 几率分布&#xff0c;cross-entropy? 1.3、优化 单独考虑一个参数 让损失函数最小&#xff0c;找导数为零的点 单独考虑w&#xff0c;w…

数字IC后端项目常见问题之streamOut layermap和innovus drc violation

Q1&#xff1a;我需要将Innovus设计GDS导出到Virtuoso&#xff0c;但发现写出GDS的过程会报如下所示的警告。这里写出GDS使用的是Virtuoso (DFII) streamOut mapping文件&#xff01; Clock Gen模块Routing DRC&#xff0c;Timing分析及解决 streamOut tease.gds2 -mapFile cd…

短剧系统开发动漫短剧系统源码开发上线小程序app教程

一、市场规模与用户增长&#xff1a;突破677亿&#xff0c;Z世代成主力 整体扩张 2025年短剧市场预计同比增长15%&#xff0c;规模达677.9亿元&#xff0c;用户规模6.62亿&#xff08;占网民59.7%&#xff09;。动漫短剧作为细分领域&#xff0c;增速显著受益于二次元文化渗透&…

太阳能高杆路灯:照亮未来的新光

在全球能源转型进程加速以及可持续发展理念日益深入人心的背景下&#xff0c;太阳能高杆路灯作为融合新能源技术、智能控制技术与多功能集成特性的创新产品&#xff0c;正逐步革新传统路灯的格局。其不仅有效解决了传统路灯对电网供电的依赖问题&#xff0c;更为城市及乡村的照…

《C++Linux编程进阶:从0实现muduo 》-第8讲.C++面试如何高效获取线程ID

章节重点 在C面试时&#xff0c;经常被问到如果高效获取线程ID&#xff0c;但不少同学都不知道如何回答。 重点是通过__thread关键字。 重点内容 视频讲解&#xff1a;《CLinux编程进阶&#xff1a;从0实现muduo C网络框架系列》-第8讲. C面试如何高效获取线程ID 测试获取线…

【Tauri2】011——菜单menu(2)

前言 前面简单地创建了菜单&#xff0c;接下来就来试试菜单中的action Rust中菜单项注册action AppHandle in tauri - Rusthttps://docs.rs/tauri/2.4.0/tauri/struct.AppHandle.html#method.on_menu_event这就需要用到App或者AppHandle中的方法on_menu_event #[must_use] …

架构设计基础系列:面向对象设计的原则

引言 面向对象设计&#xff08;Object-Oriented Design&#xff0c;OOD&#xff09;是软件开发中的重要概念&#xff0c;其核心在于通过对象、类、继承、封装和多态等机制&#xff0c;实现对现实世界问题的抽象和建模。OOD不仅有助于提高代码的可重用性、可维护性和可扩展性&a…

UE5学习笔记 FPS游戏制作35 使用.csv配置文件

文章目录 导入.csv要求首先创建一个结构体导入配置文件读取配置 导入 .csv要求 第一行必须包含标题 第一列的内容必须不能重复&#xff0c;因为第一列会被当成行的名字&#xff0c;在数据处理中发挥类似于字典的key的作用 当前的配置文件内容如下 首先创建一个结构体 结构…

嵌入式单片机ADC数模转换的基本方法

第一:模数转换的概述 1:模数转换的概念 一般在电路中,信号分为两种,一种是模拟信号,一种是数字信号,绝大多数传感器采集的都是模拟信号,如温度、湿度、烟雾浓度、亮度.......,但是对于计算机需要处理的数字信号,那就需要利用电路把模拟信号转换为数字信号,这个转换的…

01-Docker 安装

1、安装环境介绍 安装环境&#xff1a;Linux CentOS 7 本安装教程参考Docker官方文档&#xff0c;地址如下&#xff1a;https://docs.docker.com/engine/install/centos/ 2、卸载旧版docker 首先如果系统中已经存在旧的Docker&#xff0c;则先卸载&#xff1a; yum remove do…

Redis 的缓存雪崩、击穿、穿透及其解决办法

文章目录 Redis 的缓存雪崩、击穿、穿透及其解决办法缓存雪崩解决办法 缓存击穿解决方案 缓存穿透解决方案 Redis 的缓存雪崩、击穿、穿透及其解决办法 本篇文章回顾 Redis 当中缓存崩溃、击穿、穿透现象以及相应的解决办法&#xff0c;主要的参考资料是&#xff1a;https://w…

性能比拼: Pingora vs Nginx (My NEW Favorite Proxy)

本内容是对知名性能评测博主 Anton Putra Pingora vs Nginx Performance Benchmark: My NEW Favorite Proxy! 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 介绍 在本视频中&#xff0c;我们将对比 Nginx 和 Pingora&#xff08;一个用于构建网络服务的 Rust 框架…

Ranger一分钟

简介 Ranger Admin&#xff1a;Web UIPolicy Admin Tool&#xff1a;定义和管理策略的模块Ranger Plugins&#xff1a;HDFS、Hive、HBase、Kafka、Storm、YARNRanger UserSync&#xff1a; LDAP、Active DirectoryRanger KMS&#xff1a;管理和保护数据加密的密钥 加密密钥管理…

STM32单片机入门学习——第5节: [3-1]GPIO输出

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.01 STM32开发板学习——第5节&#xff1a; [3-1]GPIO输出 前言开发板说明引用解答和…