SQL语言

2023-05-16

1. 什么是SQL?

  • SQL(structured query language):结构化查询语言
    SQL是一种对关系型数据库中的数据进行定义和操作的语言
    SQL语言简洁,语法简单,好学好用
    1. 什么是SQL语句
      使用SQL语言编写出来的句子\代码,就是SQL语句
      在程序运行过程中,要想操作(增删改查,CRUD)数据库中的数据,必须使用SQL语句
      Create , Retrive, Update, Delete
    1. SQL语句的特点
      不区分大小写(比如数据库认为user和UsEr是一样的)
      每条语句都必须以分号 ; 结尾
    1. SQL中的常用关键字
      select、insert、update、delete、from、create、where、desc、order、by、group、table、alter、view、index等等
    1. SQL语句的种类数据定义语句(DDL:Data Definition Language)
      包括create和drop, Alert等操作
      在数据库中创建新表或删除表(create table或 drop table)数据操作语句(DML:Data Manipulation Language)
      包括insert、delete、update等操作
      上面的3种操作分别用于添加、修改、删除表中的数据数据查询语句(DQL:Data Query Language)
      可以用于查询获得表中的数据
      关键字select是DQL(也是所有SQL)用得最多的操作
      其他DQL常用的关键字有where,order by,group by和having
  1. 补充资料http://www.phpstudy.net/e/sql/sql_intro.html

05-(掌握)DDL语句

  • 5.0. 新建查询

    新建查询
    查询
  • 5.1. 创表
    格式create table 表名 (字段名1 字段类型1, 字段名2 字段类型2, …) ;
    示例create table if not exists t_student (id integer, name text, age inetger, score real) ;
    经验
    实际上SQLite是无类型的
    就算声明为integer类型,还是能存储字符串文本(主键除外)
    建表时声明啥类型或者不声明类型都可以,也就意味着创表语句可以这么写:create table t_student(name, age);
    为了保持良好的编程规范、方便程序员之间的交流,编写建表语句的时候最好加上每个字段的具体类型
    语句优化
    创建表格时, 最好加个表格是否已经存在的判断, 这个防止语句多次执行时发生错误create table if not exists 表名 (字段名1 字段类型1, 字段名2 字段类型2, …) ;

  • 5.2. 删表
    格式drop table 表名 ;drop table if exists 表名 ;
    示例drop table t_student ;
    语句优化
    删除表格时, 最好加个表格是否已经存在的判断, 这个防止语句多次执行时发生错误drop table if exists 表名 ;

  • 5.3. 修改表
    注意: sqlite里面只能实现Alter Table的部分功能
    不能删除一列, 修改一个已经存在的列名
    修改表名ALTER TABLE 旧表名 RENAME TO 新表名
    新增属性ALTER TABLE 表名 ADD COLUMN 列名 数据类型 限定符
    快速获取DDL语言的方法

    DDL语言快速获取

06-(掌握)约束

  • 简单约束
    不能为空not null :规定字段的值不能为null
    不能重复unique :规定字段的值必须唯一
    默认值default:指定字段的默认值
    示例create table t_student (id integer, name text not null unique, age integer not null default 1) ;
    name字段不能为null,并且唯一
    age字段不能为null,并且默认为1
  • 主键约束
    添加主键约束的原因?
    如果t_student表中就name和age两个字段,而且有些记录的name和age字段的值都一样时,那么就没法区分这些数据,造成数据库的记录不唯一,这样就不方便管理数据
    良好的数据库编程规范应该要保证每条记录的唯一性,为此,增加了主键约束
    也就是说,每张表都必须有一个主键,用来标识记录的唯一性
  • 什么是主键?
    主键(Primary Key,简称PK)用来唯一地标识某一条记录
    例如t_student可以增加一个id字段作为主键,相当于人的身份证
    主键可以是一个字段或多个字段
  • 主键的设计原则?
    主键应当是对用户没有意义的
    永远也不要更新主键
    主键不应包含动态变化的数据
    主键应当由计算机自动生成
  • 主键的声明?
    在创表的时候用primary key声明一个主键create table t_student (id integer primary key, name text, age integer) ;
    integer类型的id作为t_student表的主键
  • 主键字段
    只要声明为primary key,就说明是一个主键字段
    主键字段默认就包含了not null 和 unique 两个约束
    如果想要让主键自动增长(必须是integer类型),应该增加autoincrementcreate table t_student (id integer primary key autoincrement, name text, age integer) ;

07-(掌握)DML语句

  • 7.1. 插入数据(insert)
    格式insert into 表名 (字段1, 字段2, …) values (字段1的值, 字段2的值, …) ;
    示例insert into t_student (name, age) values (‘sz’, 10) ;
    注意
    数据库中的字符串内容应该用单引号括住
  • 7.2. 更新数据(update)
    格式update 表名 set 字段1 = 字段1的值, 字段2 = 字段2的值, … ;
    示例update t_student set name = ‘wex’, age = 20 ;注意
    上面的示例会将t_student表中所有记录的name都改为wex,age都改为20
  • 7.3. 删除数据(delete)
    格式delete from 表名 ;
    示例delete from t_student ;注意
    上面的示例会将t_student表中所有记录都删掉

08-(掌握)条件语句

  • 作用
    如果只想更新或者删除某些固定的记录,那就必须在DML语句后加上一些条件
    条件语句的常见格式
where 字段 = 某个值 ;   // 不能用两个 =
        where 字段 is 某个值 ;   // is 相当于 = 
        where 字段 != 某个值 ; 
        where 字段 is not 某个值 ;   // is not 相当于 != 
        where 字段 > 某个值 ; 
        where 字段1 = 某个值 and 字段2 > 某个值 ;  // and相当于C语言中的 &&
        where 字段1 = 某个值 or 字段2 = 某个值 ;  //  or 相当于C语言中的 ||
  • 条件语句练习
    示例
    将t_student表中年龄大于10 并且 姓名不等于wex的记录,年龄都改为 5update t_student set age = 5 where age > 10 and name != ‘wex’ ;
    删除t_student表中年龄小于等于10 或者 年龄大于30的记录delete from t_student where age <= 10 or age > 30 ;
    猜猜下面语句的作用update t_student set score = age where name = ‘wex’ ;
    将t_student表中名字等于wex的记录,score字段的值 都改为 age字段的值

09-(掌握)DQL

  • 格式select 字段1, 字段2, … from 表名 ;select * from 表名; // 查询所有的字段
    示例
select name, age from t_student ;
        select * from t_student ;
        select * from t_student where age > 10 ;  //  条件查询

10-(掌握)查询相关语句

  • 统计count(X)
select count(*) from t_student //查询所有列的个数
            select count(age) from t_student //所有age不为空的个数

avg(X)
计算某个字段的平均值sum(X)
计算某个字段的总和max(X)
计算某个字段的最大值min(X)
计算某个字段的最小值

  • 排序
    查询出来的结果可以用order by进行排序select 字段1, 字段2 from 表名 order by 字段 ;select * from t_student order by age ;
    默认是按照升序排序(由小到大),也可以变为降序(由大到小)select * from t_student order by age desc ; //降序select * from t_student order by age asc ; // 升序(默认)
    也可以用多个字段进行排序select * from t_student order by age asc, height desc ;
    先按照年龄排序(升序),年龄相等就按照身高排序(降序)limit分页
    使用limit可以精确地控制查询结果的数量,比如每次只查询10条数据
    格式select * from 表名 limit 数值1, 数值2 ;
    示例select * from t_student limit 4, 8 ;
    可以理解为:跳过最前面4条语句,然后取8条记录
  • 分页
    limit常用来做分页查询,比如每页固定显示5条数据,那么应该这样取数据
    第1页:limit 0, 5
    第2页:limit 5, 5
    第3页:limit 10, 5
    第n页:limit 5*(n-1), 5
    特殊案例select * from t_student limit 7 ;
    相当于select * from t_student limit 0, 7 ;
    表示取最前面的7条记录

11-(掌握)多表查询

  • 多表查询select 字段1, 字段2, … from 表名1, 表名2 ;
  • 别名select 别名1.字段1 as 字段别名1, 别名2.字段2 as 字段别名2, … from 表名1 as 别名1, 表名2 as 别名2 ;
    可以给表或者字段单独起别名
    as 可以省略
  • 表连接查询select 字段1, 字段2, … from 表名1, 表名2 where 表名1.id = 表名2.id;SELECT tp.id AS tpid, name, title, content FROM t_person AS tp, t_weibo AS tweibo WHERE tpid = tweibo.person_id ORDER BY tpid
  • 外键
    如果表A的主关键字是表B中的字段,则该字段称为表B的外键
CREATE TABLE "t_weibo" (
     "id" integer NOT NULL,
     "title" text,
     "content" text,
     "person_id" INTEGER,
    PRIMARY KEY("id"),
    CONSTRAINT "user" FOREIGN KEY ("person_id") REFERENCES "t_person" ("id")
)

保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值。

  • 设置外键
    1外键名称->2哪个属性-> 3参照哪个表->4参照表的那个属性

设置好之后,外键的属性就不可以随便设置属性了。只可以选择参照表里面的值

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL语言 的相关文章

  • 一张表中按最大日期过滤重复行的 SQL 查询

    我有一个 SQL 数据库 persons 它具有基于 IDNum 列的重复条目 我需要查询条目并仅根据最新创建日期显示行或重复条目 这是查询 SELECT IDNum PersonPGUID CreatedDateTime FirstNam
  • PostgreSQL 和锁定

    希望一些比我更聪明的 DBA 可以帮助我找到一个好的解决方案来完成我需要做的事情 为了便于讨论 我们假设我有一个名为 work 的表 其中包含一些列 其中一列表示给定客户端对该行工作的所有权 场景是 我将连接 2 个客户端并轮询表以查找要完
  • SQL中如何识别字符串的第一个字符是数字还是字符

    我需要将数据中的第一个字符识别为 SQL Server 中的数字或字符 我对此比较陌生 我不知道从哪里开始 但这是我到目前为止所做的事情 我的数据看起来像这样 TypeDep Transfer From 4Z2 Transfer From
  • 我的用例可以合并到单个查询中而不影响性能吗?

    我主要着眼于改善表现查询的内容以及是否能够解决单一查询对于我的用例之一 解释如下 涉及到2张表 Table 1 EMPLOYEE column1 column2 email1 email2 column5 column6 Table 2 E
  • 如何检查一个值是否已经存在以避免重复?

    我有一个 URL 表 但我不想要任何重复的 URL 如何使用 PHP MySQL 检查给定 URL 是否已在表中 如果您不想重复 可以执行以下操作 添加唯一性约束 use REPLACE http dev mysql com doc ref
  • 连接 3 三张表

    我有这个图表应该可以解释我的情况 我需要一些关于连接 3 个表的帮助 我不知道如何做这种事情 因此 我可以通过执行以下操作来经历一段检索记录的 while 循环 img src alt Album AlbumID 使用内部联接 http w
  • SQL。 SP 或函数应计算周五的下一个日期

    我需要编写一个存储过程来返回给定日期的下周五日期 例如 如果日期是 05 12 2011 那么它应该返回下周五日期 05 13 2011 如果您通过 05 16 2011 那么它应该返回日期是 5 20 2011 星期五 如果您将星期五作为
  • 如何在审计触发器中使用system_user但仍使用连接池?

    我想做以下两件事 在我的数据库表上使用审计触发器来识别哪个用户更新了什么 使用连接池来提高性能 对于 1 我在数据库触发器中使用 system user 来识别进行更改的用户 但这阻止我执行需要通用连接字符串的 2 有没有一种方法可以让我充
  • 从java运行sqlplus脚本的简单方法

    我有包含 sqlplus 特定脚本的 sql 文件 它包括 或 作为语句终止符 执行存储过程的 EXEC 等 我需要从 java jdbc 执行此脚本 而不需要 sqlplus sql ant任务 maven sql插件无法处理不同的终止符
  • 如何创建包含多列MD5的GENERATED列?

    我尝试在 PostgreSQL 14 3 中添加下表 CREATE TABLE client cache id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY request VARCHAR
  • 在实体框架 6 中使用 SqlQuery>

    我正在尝试在 EF 6 中执行 SQL 查询 select查询返回两个字符串列 例如select a b 并且可以有任意数量的行 我想将结果映射到字典 但我无法摆脱以下错误 错误 1 无法将类型 System Data Entity Inf
  • MySQL,连接两列

    MySQL 表中有两列 SUBJECT and YEAR 我想生成一个字母数字唯一编号 其中包含主题和年份的串联数据 我怎样才能做到这一点 是否可以使用像这样的简单运算符 您可以使用CONCAT http dev mysql com doc
  • pyspark.sql.functions.window 函数的“startTime”参数和 window.start 有何作用?

    示例如下 df spark createDataFrame 1 2017 05 15 23 12 26 2 5 1 2017 05 09 15 26 58 3 5 1 2017 05 18 15 26 58 3 6 2 2017 05 15
  • SQL Server 2008 中的全文搜索一步一步

    如何开始使用SQL Server 2008 中的全文搜索 阅读这些链接 SQL SERVER 2008 创建全文目录和全文搜索 http blog sqlauthority com 2008 09 05 sql server creatin
  • SQL Server 2008 GUID 列全为 0

    我希望这是我做的一个简单的傻事 我的数据库中有一个表 设置如下 column name widget guid data type uniqueidentifier allow nulls false default value newid
  • 在 SQL 中如何获得整数的最大值?

    我试图从 MySQL 数据库中找出整数 有符号或无符号 的最大值 有没有办法从数据库本身提取这些信息 是否有我可以使用的内置常量或函数 标准 SQL 或 MySQL 特定的 At http dev mysql com doc refman
  • 更高效的 LINQ 查询

    有人可以帮我将此查询循环变成高效的 Linq 查询吗 我将其加载到 TreeView 中 因此必须附加每个项目 包含也非常低效 延迟加载项目也不起作用 事实上 这个查询访问数据库的次数比应有的要多 public IQueryable
  • 从一张表更新并插入另一张表

    我有两张桌子 table1 ID 代码 姓名 table2 ID 代码 姓名 具有相同的列 我想将数据从 table1 插入到 table2 或更新列 如果 table2 中存在 table1 ID table2 ID 执行此操作的简单方法
  • 索引在 NOT IN 或 <> 子句中起作用吗?

    我读过 至少 Oracle 数据库中的普通索引基本上是 B 树结构 因此存储处理适当根节点的记录 小于 根的记录被迭代地存储在树的左侧部分 而 大于 根的记录被存储在右侧部分 正是这种存储方法有助于通过树遍历实现更快的扫描 因为深度和广度都
  • 如何统计订单总价?

    我有这些表 Orders id status user id address id 1 await 1 1 products id name price quantity 1 test1 100 5 2 test2 50 5 order p

随机推荐

  • 高通brew 方案开机揭秘

    摘要 xff1a 本文试图通过代码来深入剖析 Qualcomm 手机开机的整个过程 xff0c 即从按下开机键一直到出现待机界面 xff0c Qualcomm 的手机软件在整个流程中究竟完成了哪些工作 本文的主要目标是理清手机的初始化流程
  • 编程之美读书笔记_3.3_计算字符串的相似度

    3 3 计算字符串的相似度 和计算两字符串的最长公共子序列相似 设Ai 为字符串A a1a2a3 am 的前i 个字符 xff08 即为a1 a2 a3 ai xff09 设Bj 为字符串B b1b2b3 bn 的前j 个字符 xff08
  • 有铅喷锡和无铅喷锡的选择

    有铅喷锡和无铅喷锡 xff08 SAC xff09 在生产中工艺要求是一个非常重要的因素 xff0c 他直接决定着一个PCB板的质量和定位 xff0c 比如喷锡 镀金 沉金 xff0c 相对来说沉金就是面对高端的板子 xff0c 沉金由于质
  • 硬盘的那些事(主分区、扩展分区、逻辑分区、活动分区、系统分区、启动分区、引导扇区、MBR等

    硬盘的那些事 xff08 主分区 扩展分区 逻辑分区 活动分区 系统分区 启动分区 引导扇区 MBR等 主分区 xff0c 扩展分区 xff0c 逻辑分区 xff0c 活动分区 xff0c 系统分区 xff0c 启动分区 主引导扇区 xff
  • Vcc(电源)和GND(地)之间接电容的作用

    1 在直流电源 xff08 Vcc xff09 和地之间并接电容的电容可称为滤波电容 xff0e 滤波电容滤除电源的杂波和交流成分 xff0c 压平滑脉动直流电 xff0c 储存电能 xff0e 取值一般100 xff0d 4700uF x
  • APM/Pixhawk地面站航迹规划指令单

    本文来源于http ardupilot org copter docs mission command list html condition distance 由于对APM Pixhawk的爱好 xff0c 翻译成中文供参考 xff0c
  • APM/Pixhawk路径规划飞行(自动起飞/降落/航路点飞行)

    APM Pixhawk路径规划飞行 xff08 自动起飞 降落 航路点飞行 xff09 本节主要介绍各类飞行器一般的航路点设置 xff0c 已经实现了自动起飞降落和按计划轨迹飞行 设置家的位置 对于直升机和多旋翼家的位置一般是飞控解锁的位置
  • E2上GBA模拟器移植的困难。。。

    终于决心动手写GBA的模拟器了 修改了半晌 xff0c 终于吧Oop的模拟器源码编译通过 xff0c 但是到了机器上却跑不起来 xff0c 那个源码用了一个非常奇怪的方式来处理系统响应 xff1a 主动调用系统去处理 xff0c 没开线程
  • 蓝牙物理链路类型:SCO和ACL链路

    蓝牙物理链路ACL Asynchronous Connectionless 另外的一种链路是SCO Synchronous Connection Oriented 主要用来传输对时间要求很高的数据通信 蓝牙基带技术支持两种连接类型 xff1
  • Linux内核角度分析tcpdump原理(二)

    上篇文章介绍了在内核角度tcpdump的抓包原理 1 xff0c 主要流程如下 xff1a 应用层通过libpcap库 xff1a 调用系统调用创建socket sock fd 61 socket PF PACKET SOCK RAW ht
  • 3 Linux目录管理

    注意 xff1a 在下面的讲解中 xff0c 每个命令都有很多的参数说明 选项 xff0c 我们只讲其中的几个 xff0c 关键是让学生掌握命令的语法 xff1b 学生学习完语法后 xff0c 就可以自己按照参数书写各种命令 xff0c 这
  • 多线程-读写安全

    多线程31 读写安全01 简介 文件操作 IO操作 读取文件 往文件中写入内容 不能允许读取和写入同时进行 我们之前做的加锁那种操作 xff0c 平时开发中有点缺陷我们最好让读的操作可以多条线程一起读取 多读单写 xff0c 多线程出乱主要
  • 单片机的程序具体运行过程以及栈空间的使用

    单片机的程序具体运行过程以及栈空间的使用 初始化RAM xff1a 将启动文件里选择的RAM空间清零 xff0c 将初始化不为零的全局变量在RAM里赋值 给PC指针赋初值 xff1a 将程序的第一条语句在ROM的地址取出给PC指针 程序执行
  • __block-内存管理

    我们创建一个对象如果我们block内部用到了 block类型的变量 xff0c 他会拥有这个对象 xff0c 我们可以通过cpp文件来分析 一旦访问对象 xff0c desc结构体里面就会多两个成员 xff0c 一个是copy 和dispo
  • 多线程 线程安全

    多线程的安全隐患 我们用多线程有很多好处 xff0c 但是也存在安全隐患 资源共享 1块资源可能会被多个线程共享 xff0c 也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象 同一个变量 同一个文件 当多个线程访问同一块资源时
  • IOS 推送通知 本地推送和远程推送

    什么是推送通知 首先明确 此处的推送通知跟我们的 NSNotification 没有半毛钱关系 可以理解为 向用户推送一条信息来通知用户某件事情 作用 可以在APP退到后台 或者关闭时 继续推送一条消息告诉用户某件事情 推送通知的应用场景
  • IOS Xcode用git管理我们的代码git的使用

    项目部署 xff0c 代码仓库 进入网站 创建项目 xff0c 2选择开源许可证的时候很关键 创建成功 然后找到 ssh https链接 用来认证 可以先用https不需要生成公钥和私钥 在终端cd到当前项目的文件夹 然后 使用 git c
  • Linux系统与设置命令

    2 系统与设置命令 在前面的两个章节中 xff0c 我们主要介绍了Linux基本知识和虚拟机的安装 xff0c 从当前章节开始 xff0c 我们一起学习下Linux的基本命令 xff0c 在当前章节 xff0c 我们先简单的学习下一些系统的
  • 4. iOS面试题原理篇2

    lldb gdb 常用的调试命令 xff1f po xff1a 打印对象 xff0c 会调用对象description方法 是print object的简写expr xff1a 可以在调试时动态执行指定表达式 xff0c 并将结果打印出来
  • SQL语言

    1 什么是SQL SQL structured query language xff1a 结构化查询语言 SQL是一种对关系型数据库中的数据进行定义和操作的语言 SQL语言简洁 xff0c 语法简单 xff0c 好学好用 什么是SQL语句