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 国家字符 (NCHAR) 数据类型的真正用途是什么?

    也CHAR CHARACTER and VARCHAR CHARACTER VARYING SQL 提供了NCHAR NATIONAL CHARACTER and NVARCHAR NATIONAL CHARACTER VARYING 类型
  • 如何在mysql中选择具有相同值集的列?

    我的桌子是 patients pid name city disease did dname has disease did pid 我想列出具有相同疾病组的患者 pid 和 did 分别是患者和疾病表中的主键 并且是 has diseas
  • 如何查找当前数据库类型

    我们有一个 SQL 脚本可以在多种类型的数据库上执行 是否可以获取正在执行 SQL 脚本的当前数据库的类型 注意 我们不能使用非标准 SQL 即 TSQL 等 不 ANSI SQL 中没有任何关于确定数据库供应商的内容
  • 在 MySQL 中对整数字段运行带引号的数字(字符串)查询时会发生哪些复杂情况

    在 SQL 中 不应引用整数 因为如果引用 它将是一个字符串 但我很好奇如果我这样做会出现什么问题 并发症 例如 SELECT FROM table WHERE id 1 正确的 vs SELECT FROM table WHERE id
  • 插入 Hive 表 - 非分区表到具有多个分区的分区表 - 无法插入目标表,因为列号/类型

    当我尝试插入分区表时 出现以下错误 SemanticException 错误 10044 第 1 23 行无法插入目标表 因为列号 类型不同 表 insclause 0 有 6 列 这 3 列已分区 我们不需要任何必须从中转储 存储的过滤器
  • 将 .MDF SQL Server 数据库与 ASP.NET 结合使用与使用 SQL Server

    我目前正在 ASP NET MVC 中编写一个网站 我的数据库 其中还没有任何数据 只有正确的表 使用 SQL Server 2008 我已将其安装在我的开发计算机上 我使用服务器资源管理器从应用程序连接到数据库 然后使用 LINQ to
  • 如何在 DB2 AS/400 中将小数字段转换为日期字段?

    我有一个 DECIMAL 字段 其中包含 AS400 格式的日期 1100614 我努力了 cast MYDATE as DATE 但我无法将 DECIMAL 转换为 DATE 而 DATE MYDATE 返回空值 如何将此字段转换为日期字
  • 有没有办法阻止 SQL Express 2008 空闲?

    我使用 SQL Express 2008 作为 Web 应用程序的后端 问题是 Web 应用程序是在工作时间使用的 因此有时在午餐或休息时间 如果 20 分钟内没有用户登录 SQL Express 将进入空闲状态模式并释放其缓存 我知道这一
  • PostgreSQL 中“-”处或附近的语法错误

    我正在尝试运行查询来更新用户密码 alter user dell sys with password Pass 133 但因为 它给了我这样的错误 ERROR syntax error at or near LINE 1 alter use
  • 通过 osql.exe 运行脚本时出现问题

    我尝试以这种格式运行我的软件的更新脚本 osql exe i path to script U 用户 P 密码 S sqlserver 位置 d 数据库名称 n b 大多数脚本的格式相同 并且都以 GO 结尾 其中很多都运行得很好 但随机脚
  • 根据日期顺序排名

    我的数据如下 Heading Date A 2009 02 01 B 2009 02 03 c 2009 02 05 d 2009 02 06 e 2009 02 08 我需要如下排名 Heading Date Rank A 2009 02
  • 什么时候应该使用 C++ 而不是 SQL?

    我是一名 C 程序员 偶尔使用 MySQL 来处理数据库 但我的 SQL 知识相当有限 但我肯定愿意改变这一点 目前 我正在尝试仅使用 SQL 查询对数据库中的数据进行分析 但我准备放弃了 转而将数据导入到C 中 用C 代码进行分析 我和同
  • Reporting Services 在哪里存储其日志文件

    最相关的谷歌结果似乎表明 为了访问日志 我们必须将您自己的日志表部署到数据库并制作报告服务写入它 http technet microsoft com en us library ms157403 aspx 简而言之 Reporting S
  • JDBC插入实数数组

    我试图将一个真实的数组插入到 postgresql 数组中 该表的定义是 String sqlTable CREATE TABLE IF NOT EXISTS ccmBlock sampleId INTEGER block REAL 插入内
  • 在存储过程中验证用户的最简单方法?

    我需要一个存储过程 可以通过发送以下内容来检查登录尝试时他们是否是有效用户login and password查看它们在数据库中是否匹配 有没有一种简单的方法可以做到这一点 如果没有更多信息 我目前能提供的最好信息是 CREATE STOR
  • 从 Getdate() 获取时间

    我想采取Getdate 结果 例如 2011 10 05 11 26 55 000 into 11 26 55 AM 我看过其他地方并发现 Select RIGHT CONVERT VARCHAR GETDATE 100 7 这给了我 11
  • 我不断收到错误“关系 [TABLE] 不存在”

    我一直在尝试查询数据库中的两个表 在服务器资源管理器中 我可以看到两个表 甚至可以看到其中的列 我们将它们称为 Schema table1 和 Schema table2 其中 Schema 的第一个字母大写 我尝试运行以下查询 selec
  • mysql自动存储记录创建时间戳

    mysql 有什么方法可以在创建记录时自动将时间戳存储在记录行中 我试图使用时间戳 数据类型 和 current timestamp 作为默认值 但后来意识到每次更新记录时都会更新 我只需要一些可以存储创建时间戳的东西 Thanks Set
  • SQL 约束以防止根据列的先前值更新列

    是否可以使用检查约束 或其他一些技术 来防止在更新记录时设置与其先前值相矛盾的值 一个例子是 NULL 时间戳 表明发生了某些事情 例如 file exported 一旦文件被导出并且具有非 NULL 值 就不应再将其设置为 NULL 另一
  • SQL 更新 - 更新选定的行

    我正在使用 SQL Server 2008 我有一个名为MYTABLE有两列 ID STATUS 我想编写一个存储过程来返回其记录STATUS是 0 但是这个存储过程必须更新STATUS返回行数为 1 如何在单个查询中执行此选择和更新操作

随机推荐

  • 高通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语句