SQL命令(mysql必知必会笔记)

第一章

  1. 什么是数据库
    数据库是一个以某种有组织的方式存储的数据的集合,需要区分数据库和数据库软件,数据库软件称为DBMS(数据库管理系统),数据库是通过DBMS创建和操作的容器。我们并不能直接访问数据库,而是通过DBMS来访问数据库。

  2. 表是某种特定类型数据的结构化清单,表是一种结构化文件,可用来存储某种特定类型的数据。数据库中每个表都有自己的名字,用来标示自己,此名字是唯一的。
  3. 模式
    模式是关于数据库和表的布局及特性的信息,可以用来描述数据库中特定的表以及整个数据库
  4. 列与行
    列是表中的一个字段,所有表都是由一个或多个列组成的。数据库中每个列都有相应的数据类型,数据类型定义列可以存储的数据类型
    行是表中的一个记录,每一行是一个记录
  5. 主键
    主键是表的一列(或一组列),其值可以唯一区分表中的每一行
    表中的任意一列都可以作为主键,只要它满足:
    • 任意两行都不具有相同的主键值
    • 每一行都必须具有一个主键值(主键列不允许NULL值)

使用主键的好习惯:
- 不更新主键列中的值
- 不重用主键列的值
- 不在主键列中使用可能会更改的值

  1. 什么是SQL
    SQL是结构化查询语言(Structured Query Language),是一种专门用来与数据库通信的语言
    SQL有如下优点:
    • SQL不是某个特定数据库供应商专有的语言,学习此语言可以喝几乎所有的数据库打交道
    • SQL简单易学
    • SQL尽管看上去简单,但它实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作

第二章 MySQL简介

  1. 什么是MySQL
    数据的所有存储,检索,管理和处理实际上由数据库软件完成,MySQL是一种DBMS,即它是一种数据库软件
    MySQL的优点:
    • 成本,MySQL是开源的,一般可以免费使用
    • 性能,MySQL执行非常快
    • 可信赖,一些主流的大公司都在使用它
    • 简单,MySQL很容易安装和使用
  2. DBMS的分类
    DBMS分为两类:
    • 基于共享文件系统的DBMS(Microsoft AccessFileMaker)
    • 基于客户机-服务器的DBMS,如MySQLOracleMicrosoft SQL Server
      服务器部分是负责所有数据的访问和处理的软件,这个软件运行在称为数据库服务器的计算机上,与数据库打交道的只有服务器软件,客户机是与用户打交道的软件。客户机软件提交请求,服务器软件处理请求,并将结果送回到客户机软件
  3. MySQL工具
    • mysql命令行实用程序
    • MySQL Administrator
    • MySQL Query Browser

第三章 使用MySQL

  1. 连接
    为了连接到MySQL,需要一下信息:
    • 主机名(计算机名),如果连接到本地MySQL服务器,为localhost
    • 端口(如果使用默认端口3306之外的端口)
    • 一个合法的用户名
    • 用户口令(如果需要)
  2. 选择数据库
    在最初连接到MySQL时,没有任何数据库打开供我们使用,需要选择一个数据库,使用USE关键字,USE语句不返回任何结果,依赖于使用的客户机,显示某种形式的通知
  3. 了解数据库和表
    数据库,表,列,用户,权限等信息被存储在数据库和表中,可用SHOW命令来显示这些信息
    • show databases
      返回可用数据库的一个列表,包含在这个表中的可能是MySQL内部使用的数据库,如mysqlinformation_schema
    • show tables
      返回当前选择的数据库内可用表的列表
    • show columns form xx 也可以用describe xx
      显示表列,对于给定的表名,每个字段返回一行,行中包括字段名,数据类型,是否允许为NULL,键信息,默认值以及其它信息
    • show status
      用于显示广泛的服务器状态信息
    • show create database xxshow create table xx
      用于显示创建特定数据库或表的信息
    • show grants'
      用来显示授予用户的安全权限 </li>
      <li>
      show errorsshow warnings`
      用来显示服务器错误或警告信息

第四章 检索数据

  1. select语句
    它的用途是从一个或多个表中检索信息,为了使用select检索表数据,必须至少给出两条信息:
    • 想选择什么
    • 从什么地方选择
  2. 检索单个列
    select xx from yy
    利用 select语句从 yy表中检索出名为 xx的列,所需的列名在 select关键字后给出, from关键字后跟表名。返回的数据没有过滤,也没有排序
  3. 检索多个列
    使用select关键字,需要给出多个列名,列名之间必须以逗号分隔
    select xx,yy from zz
    这条语句可以返回两个列
  4. 检索所有列
    使用通配符*来达到
    select * from xx
    如果给定一个通配符*,则返回表中的所有列,列的顺序一般是列在表定义中出现的顺序
  5. 检索不同的行
    解决办法是使用distinct关键字,此关键字指示MySQL只返回不同的值
    select distinct xx from yy
    这条语句只返回不容的xx行,如果使用distinct关键字,它必须放在列名的前面
  6. 限制结果
    为了返回第一行或者前几行,可以使用limit子句
    select xx from yy limit 4
    此语句使用select语句检索单个列,limit 4指示MySQL返回不多于4行
    select xx from yy limit 4,4
    limit 3,4指示MySQL返回从行3开始的以下4行,第一个数为开始位置,第二个数为要检索的行数(第一行从0开始),MySQL 5支持limit的另一种替代语法limit 4 offset 3
  7. 使用完全限定的表名和列名
    • select xx.yy from xx
      这条语句指定了表xx中的具体列(yy)
    • select xx.yy from zz.xx
      这条语句指定了zz数据库中的具体表(xx)

第五章 排序检索数据

  1. 排序数据
    关系数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义
    • 子句
      SQL语句由子句构成,有些子句是必需的,有些子句是可选的
      为了明确的排序select语句检索出的数据,可使用order by子句,order by子句取一个或多个列的名字,据此对输出进行排序
      select xx from yy order by xx
      排序所使用的列可以为显示的列,也可以是其它列
  2. 按多个列排序
    经常需要按不止一个列进行数据排序(如果由相同的行,这个很有用)
    select xx from yy order aa,bb
    这个语句的输出,尽在多个行具有相同的aa值时才对yy按bb进行排序,如果aa列中所有值都是唯一的,则不会按照bb排序
  3. 指定排序方向
    数据排序不仅限于升序排序,这只是默认的排序顺序,还可以使用order by子句以降序排序,为了进行降序排序,需要使用desc关键字
    • select * from xx order by yy desc
      这条语句按照yy列的降序来排序
    • select * from xx order by yy desc,zz
      这条语句先对yy进行降序排序,然后在对zz进行升序排序。desc关键字只应用到位于其前的列名,如果想在多列上进行降序排序,必须对每个列制定desc关键字。与desc相反的关键字是asc,没多大用处,因为升序是默认的
    • select * from xx order by yy desc limit 1
      使用order bylimit组合,可以找出一个列中最高或最低的值,limit子句位于order by子句之后

第六章 过滤数据

  1. 使用where子句
    数据库很少需要检索所有行,至检索所需数据需要制定搜索条件,搜索条件也称过滤条件。在select语句中,数据根据where子句中指定的搜索条件进行过滤,where子句在from子句之后给出

    select xx from yy where xx = val
    这条语句只返回xx=val的行,当同时使用order by子句和where子句时,应将order by子句放到where子句之后,否则将发生错误

  2. where子句操作符
    MySQL支持的条件操作符:

    • = 等于
    • <> 不等于
    • != 不等于
    • < 小于
    • <= 小于等于
    • /> 大于
    • />= 大于等于
    • between 在指定的两个值之间

    • 检查单个值

    • 不匹配检查 !=
    • 范围值检查 使用between操作符,指定的两个值必须用and分割
    • 空值检查 where xx is null
      在创建表时,表设计人员可以指定其中列是否可以不包含值,在一个列不包含值时,称其为包含空值NULL.空值和0,空字符串,空格不同

第七章 数据过滤

  1. 组合where子句
    MySQL允许给出多个where子句,这些子句可以两种方式使用:
    • and子句方式
    • or子句方式
      以上两个操作符称为逻辑操作符
    • and操作符
      select xx,yy from zz where aa = val1 and bb < val2
      and指示DBMS只返回满足所有给定条件的行,还可以条件多个过滤条件,每添加一条就要使用一个and
    • or操作符
      与and操作符不同,它知识MySQL检索匹配任一条件的行
      select xx,yy from zz where aa = val1 or aa = val2
      or操作符高速DBMS匹配任一条件而不是同时匹配两个条件
    • 计算次序
      where可包含任意数目的and和or操作符,允许两者结合进行复杂和高级的过滤。and的优先级高于or的优先级,优先计算and操作符,为了解决计算次序问题,where子句可以使用圆括号
  2. in操作符
    圆括号在where子句中还有另外一种用法,in操作符用来指定条件范围,in取合法值的清单用逗号隔开,全都放在圆括号里
    select xx from yy where zz in (val1,val2)
    此select语句检索zz等于val1和val2的所有行,or操作符也能完成相同的功能
    • 为什么要用in操作符呢
      • 在使用长的合法清单时,in操作符的语法更清楚直观
      • 在使用in操作符时,计算次序更容易管理(因为使用的操作符较少)
      • in操作符一般比or操作符执行的快
      • in的最大优点是可以包含其他select语句,使得能够动态的建立where子句
    • not操作符
      not操作符只有一个功能,就是否定它之后的所有条件
      select xx from yy where zz not in (val1,val2)
      这条语句匹配val1和val2之外的所有行
      MySQL支持not对in,between和exists子句去反

第八章 用通配符进行过滤

  1. like操作符
    通配符是用来匹配值的一部分的特殊字符
    搜索模式是由字面值,通配符或两者组合构成的搜索条件
    为在搜索子句中使用通配符,必须使用like操作符。like指示MySQL后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较
    • 百分号通配符(%)
      最常使用的通配符是百分号(%),在搜索串中,%表示任何子符出现任意次数
      select xx from yy where zz like 'hello%'
      这条语句检索任意以hello开头的词。%操作符告诉MySQL接受hello之后的任意字符,不管它有多少字符
      select xx from yy where zz like '%hello%'
      通配符可以在搜索模式中任意位置使用,并且可以使用多个通配符。搜索模式%hello%表示匹配任何位置包含文本hello的值
      %代表搜索模式中给定位置的0个,1个或多个字符
      注意where xx like '%'并不能匹配值为NULL的行
    • 下划线通配符 (_)
      下划线只匹配单个字符
  2. 使用通配符的技巧
    通配符搜索处理一般比前面讨论的其他搜索所花的时间长,这里给出通配符的使用技巧:
    • 不要过度使用通配符。如果其他操作符可以达到相同目的,应该使用其他操作符
    • 在确实需要使用通配符时,除非绝对必要,否则不要把它们放在搜索模式的开始处,这样是最慢的
    • 仔细注意通配符的位置

第九章 用正则表达式进行搜索

  1. 正则表达式
    正则表达式是用来匹配文本的特殊的串(字符集合)。所有种类的程序设计语言,文本编辑器,操作系统等都支持正则表达式
    正则表达式用正则表达式语言建立,正则表达式语言是一种特殊的语言,与任意语言一样,正则表达式具有我们必须学习的特殊语法和指令
  2. 使用MySQL正则表达式
    正则表达式的作用时匹配文本,将一个模式(正则表达式)与一个文本进行比较。MySQL用where子句对正则表达式提供初步的支持,允许指定正则表达式,过滤select检索出来的数据。MySQL仅支持正则表达式语言的一个子集

    • 基本字符匹配
      select xx from yy where zz regexp 'hh'
      这条语句看上去非常像使用like的语句。它告诉MySQL:regexp后所跟的东西作为正则表达式处理
      .是正则表达式语言中一个特殊的字符,它表示匹配任意一个字符

    • like与regexp的区别
      like匹配整个列,如果被匹配的文本在列值中出现,like将不会找到它。regexp在列值内进行匹配,如果被匹配的文本在列值中出现,regexp将会找到它。regexp使用定位符^和$也可以匹配整列

    • 进行or匹配
      为搜索两个串之一,使用|
      select xx from yy where zz regexp 'hello|hi'
      这条语句使用正则表达式hello|hi,|为正则表达式的or操作符,它表示匹配其中之一,因此hello和hi都匹配并返回。
    • 匹配几个字符之一
      使用[]括起来几个字符
      select xx from yy where zz regexp '[123]hello'
      这条语句使用了正则表达式[123]hello,[123]定义了一组字符,它的意思是匹配1或2或3。 [123]是[1|2|3]的缩写,也可以使用后者。[^123]匹配除这些字符外的任何东西
    • 匹配范围
      例如[1-4]匹配从1到4所有数字,,[a-z]匹配任意字母
      select xx from yy where zz regexp '[1-3]hello'
      这条语句和上面的[123]功能是相同的
    • 匹配特殊字符
      为了匹配特殊字符,必须用\为前导。\-表示查找-,\.表示查找.。这种处理就是所谓的转义。
      为了匹配\,需要使用\\

    多数正则表达式使用\转义特殊字符,但MySQL要求使用两个\转义(MySQL自己解释一个,正则表达式库解释另一个)

  3. 匹配字符类
    字符类有:
  4. [:alnum:] 任意字母和数字([a-zA-Z0-9])
  5. [:alpha:] 任意字符([a-zA-Z])
  6. [:blank:] 空格和制表([\t])
  7. [:cntrl:] ASCII控制字符
  8. [:digit:] 任意数字([0-9])
  9. [:graph:] 与[:print:]相同,但不包含空格
  10. [:lower:] 任意小写字母([a-z])
  11. [:print:] 任意可打印字符
  12. [:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
  13. [:space:] 包括空格在内的任意空白字符([\f\n\r\t\v])
  14. [:upper:] 任意大写字母([A-Z])
  15. [:xdigit:] 任意十六进制数字([a-fA-F0-9])

  16. 匹配多个实例
    重复元字符:

  17. * 0个或多个匹配
  18. /+ 1个或多个匹配({1,})
  19. ? 0个或1个匹配({0,1})
  20. {n} 指定书目匹配
  21. {n,} 不少于指定书目匹配
  22. {n,m} 匹配数目的范围(m不超过255)

select xx from yy where zz regexp '\\([0-9] sticks?\\)'
这条语句\(和\)匹配括号,[0-9]匹配任意数字,sticks?匹配stick和sticks(s后的?使s称为可选)
使用正则表达式时,编写的某个特殊的表达式几乎总是不止一种方法
- 定位符
定位元字符:
- ^ 文本的开始
- $ 文本的结尾
- [[:<:]] 词的开始
- [[:>:]] 词的结尾
select xx from yy where zz regexp '^[0-9]\\.'
^匹配串的开始
通过用^开始每个表达式,用$结束每个表达式,可以使regexp与like作用一样
正则表达式的测试: select 'hello' regexp '[0-9]' 返回0

第十章 创建计算字段

  1. 计算字段
    存储在数据库表中的数据一般不是应用程序所需要的格式,我们需要直接从数据库中检索出转换,计算或格式化过的数据,而不是检索出数据,然后再在客户机应用程序中重新格式化
    以上就是计算字段发挥的作用,计算字段并不实际存在于数据库表中,计算字段是运行时在select语句内创建的
    字段(field)基本上与列的意思相同,经常互换使用。只有数据库知道select语句哪些列是实际的表列,哪些列是计算字段
  2. 拼接字段
    拼接是将值连接到一起构成单个值
    在MySQL的select语句中,可使用Concat()函数来拼接两个列。多数DBMS使用+或||来实现拼接,MySQL则使用Concat()函数来实现
    Concat()需要一个或多个指定的串,各个串之间用逗号分隔
    select Concat(xx,yy) from zz
    LTrim()和RTrim()分别为去掉串左边的空格和去掉串右边的空格
    • 使用别名
      前面的拼接字段只是一个值,一个未命名的列不能用于客户机应用中,因为客户机没有办法引用它,为了解决这个问题,SQL支持列别名,别名用as关键字赋予
      select concat(xx,yy) as xy from zz
      现在列名为xy,任何客户机都可以按名引用这个列,就像它是实际的表列一样,别名有时也称导出列
  3. 执行算数运算
    select xx*yy as xy from zz
    这条语句将xx与yy相乘的结果作为xy列名,MySQL支持+,-,*,/基本运算符,圆括号可以用来区分优先级顺序

第十一章 使用数据处理函数

  1. 函数
    与大多数计算机语言一样,SQL支持利用函数处理数据。函数一般在数据上执行,它给数据的转换和处理提供了方便
  2. 使用函数
    大多数SQL实现支持一下类型的函数:

    • 用于处理文本串,如删除或填充值,转换大小写
    • 用于数值数据进行算术操作,如绝对值,代数运算
    • 用于处理日期和时间值并从这些值中提取特定成分
    • 返回DBMS正使用的特殊信息,如用户登陆信息,检查版本细节的系统函数

    • 文本处理函数
      不再详述

    • 日期和时间处理函数
      不在详述
    • 数值处理函数
      这些函数一般用于代数,三角或几何运算

第十二章 汇总数据

  1. 聚集函数
    我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提供了专门的函数。使用这些函数,MySQL查询可用于检索数据,以便分析和报表生成,这种类型的检索例子有以下几种:
    • 确定表中行数
    • 获得表中行组的和
    • 找出表列的最大值,最小值和平均值

SQL的5个聚集函数:
- avg() 返回某列的平均值
avg()函数忽略值为NULL的行
select avg(xx) as avg_xx from yy
这条语句求出xx列的平均值,并将它作为新的一列返回,avg()只用于单个列,如果为了获得多个列的平均值,必须使用多个avg()函数
- count() 返回某列的行数
有两种用法:
1. 使用count(*)对表中行的数目进行计数,不管表列中包含的是空值还是非空值
2. 使用count(column)对特定列中具有值的行进行计数,忽略NULL值
- max() 返回某列的最大值
MySQL允许它用来返回任意列中的最大值,包括返回文本中的最大值,在用于文本数据时,如果数据按相应的列排序,则max()返回最后一行,max()忽略列值为NULL的行
- min() 返回某列的最小值
与max()的功能相反
- sum() 返回某列之和
sum()用来返回指定列值的和。sum()忽略列值为NULL的行
2. 聚集不同值
以上5个聚集函数都可以如下使用:
- 对所有行执行运算,指定all参数或不给参数(因为all是默认行为)
- 只包含不同的值,指定distinct参数
3. 组合聚集函数
select语句可根据需要包含多个聚集函数

select count(*) as num_items 
min(xx) as min_xx
max(xx) as max_xx
avg(xx) as avg_xx
from yy 

第十三章 分组数据

  1. 数据分组
    分组允许把数据分为多个逻辑组,以便能对每个组进行聚集计算
  2. 创建分组
    分组是在select语句的group by子句中建立的。group by子句指示MySQL分组数据,然后对整个组而不是整个结果进行聚集
    使用group by的一些重要规定:
    • group by子句可以包含任意数目的列,这使得能对分组进行嵌套
    • 如果在group by子句中嵌套了分组,数据将在最后规定的分组上进行汇总
    • group by子句中列出的每个列都必须是检索列或有效的表达式
    • 除聚集计算语句外,select语句中的每个列都必须在group by子句中给出
    • 如果分组列中具有NULL值,则NULL将作为一个分组返回
    • group by子句必须出现在where子句之后order by子句之前
  3. 过滤分组
    MySQL还允许过滤分组,规定包括哪些分组,排除哪些分组。MySQL为此目的提供了另外的子句,那就是having子句,having非常类似于where,唯一的差别是where过滤行,having过滤分组
    • having和where的差别
      where在分组前进行过滤,having在分组后进行过滤
  4. 分组和排序
    • order by与group by的差别
      group by分组的数据可能不是分组的顺序,一般在使用group by子句时,应该也给出order by子句,这是保证数据正确排序的唯一方法
  5. select子句顺序
    select form where group by having order by limit

第十四章 使用子查询

  1. 子查询
    查询:任何SQL语句都是查询,此术语一般指select语句
    SQL还允许创建子查询,即嵌套在其他查询中的查询
  2. 利用子查询进行过滤
    可以把一条select语句返回的结果用于另一条select语句的where子句中。先执行子查询,子查询返回的结果用于外层的where子句
    在where子句中使用子查询能够编写功能很强并且很灵活的SQL语句,对于能嵌套的子查询数目没有限制
  3. 作为计算字段使用子查询
    使用子查询的另一方法是创建计算字段

第十五章 联结表

  1. 联结
    SQL最强大的功能之一就是能在数据检索查询的执行中联结表。联结是利用SQL的select能执行的最重要的操作
    • 关系表
      相同的数据出现多次绝不是一件好事,此因素是关系数据库设计的基础。关系表的设计就是要保证把信息分解成多个表,一类数据一个表。各表通过某些常用的值(即关系设计中的关系)互相关联
    • 外键
      外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系,这样做的好处如下:
    • 避免信息重复,从而不浪费时间和空间
    • 如果一个表中信息变动,可以只更新该表的单个记录,相关表中的数据不用改动
    • 由于数据无重复,显然数据是一致的,这是的处理数据更简单
      总之,关系数据可以有效的存储和方便的处理,因此关系数据库的可伸缩性远比非关系数据库要好
    • 可伸缩性
      能够适应不断增加的工作量而不失败。设计良好的数据库或应用程序称之为可伸缩性好
    • 为什么要使用联结
      分解数据为多个表能更有效的存储,更方便的处理,并具有更大的可伸缩性
      如果数据存储在多个表中,怎样用单条select语句检索出数据?可以使用联结,简单的说,联结是一种机制,用来在一条select语句中关联表,因此称之为联结。使用特殊的语法,可以联结多个表返回一组输出
  2. 创建联结
    联结的创建非常简单,规定要连接的所有表以及它们如何关联即可
select vend_name,prod_name,prod_price
from vendors,products
where vendors.vend_id = products.vend_id
order by vend_name,prod_name;

这里prod_name和prod_price在一个表中,而vend_name在另一个表中,from子句列出了两个表,这两个表用where子句正确联结,where子句指示MySQL匹配vendors表中的vend_id和products表中的vend_id(需要完全限定列名)
- where子句的重要性
在联结两个表时,实际上做的时将第一个表的每一行与第二个表中的每一行配对,where子句作为过滤跳进啊,它只包含哪些匹配给定条件的行,没有where子句,第一个表中的每个行将与第二个表中的每个行配对,而不管它们逻辑上是否可以配在一起
- 笛卡尔积
由没有联结条件的表关系返回的结果为笛卡尔积,检索出的行的数目将是两个表行数的乘积
- 内部联结
目前所有的联结称为等值联结,它基于两个表之间的相等测试,这种联结也称为内部联结。对这种联结可以用另一种语法,使用inner join

select vend_name,prod_name,prod_price
form vendors inner join products
on vendors.vend_id = products.vend_id;
  • 联结多个表
    SQL对一条select语句中可以联结的表的数目没有限制,创建联结的基本规则也相同。首先列出所有表,然后定义表之间的关系

第十六章 创建高级联结

  1. 使用表别名
    别名处理用于列名和计算字段外,SQL还允许给表名起别名,这么做有两个理由
    • 缩短SQL语句
    • 允许在单条select语句中多次使用相同的表
      表别名只在查询执行中使用,与列别名不一样,表别名不返回到客户机
  2. 使用不同类型的联结
    除了内部联结外,还有三种联结:
    • 自联结
      自联结可以和子查询达到相同的功能,而且子联结比子查询要快得多
    • 自然联结
      标准的联结返回所有数据,甚至相同的列出现多次,自然联结排出多次出现,时每个列只返回一次
    • 外部联结
      有时会会需要包含没有关联行的那些行
      联结包含了那些在相关表中没有关联行的行,这种类型的联结称为外部联结
      使用outer join关键字,而且需要left和right关键字来修饰(right指出的是outer join右边的表,left指出的是outer join左边的表)
  3. 使用带聚集函数的联结
    聚集函数可以和联结一起使用
  4. 使用联结和联结条件
    注意:
    • 注意所使用的联结类型,一般我们使用内部联结
    • 保证正确的联结条件
    • 总是提供联结条件,否则会得到笛卡尔积

第十七章 组合查询

  1. 组合查询
    多数SQL查询都只包含从一个或多个表中返回数据的单条select语句,MySQL也允许执行多个查询(多条select语句),并将结果作为单个查询结果集返回,这些组合查询称为并或复合查询
    使用组合查询的两个情况:

    • 在单个查询中从不同的表返回类似结构的数据
    • 对单个表执行多个查询,按单个查询返回数据

    • 组合查询与多个where条件
      任何具有多个where子句的select语句都可以用一个组合查询给出

  2. 创建组合查询
    利用union操作符组合数条SQL查询
    • 使用union
      在各条select语句之间放上关键字union,与where子句使用or来连接多个条件效果一样
    • union规则

第十九章 插入数据

  1. 数据插入
    insert是用来插入行到数据库的,插入可以用几种方式使用:
    • 插入完整的行
    • 插入行的一部分
    • 插入多行
    • 插入某些查询的结果
  2. 插入完整的行
insert into xx 
values(..,..,...);

insert语句一般不会产生输出。对每个列必须提供一个值,如果某列没有值,应该使用NULL值,各个列必须以它们在表定义中出现的次序填充。编写依赖于特定次序的SQL语句是很不安全的,下面是更安全的方法(不过繁琐)

insert into xx(各列名)
values(..,..,....);

因为提供了列名,values必须一起指定的次序匹配指定列名,不一定按照各列在实际表的次序。这种方法可以省略某些列
省略的列必须满足以下某个条件:
- 该列定义允许NULL值
- 在表定义中给出默认值,如果不给出值,将使用默认值
除了以上情况,MySQL将产生一条错误信息,并且相应的行插入不成功
如果数据检索是最重要的,则可以通过在insert和into之间添加关键字low_priority,指示mySQL降低insert语句的优先级
3. 插入多个行
可以使用两种方法:
- 多条insert语句,每条语句用一个分号结束,一次提交
- 单条insert语句多组值,每组值用一对圆括号扩起来,用逗号分隔
4. 插入检索出的数据
insert还可以将一条seelct语句的结果插入表中,这就是所谓的insert select,它有一条insert语句和一条select语句组成

insert into xx(列名) 
select 列名 from yy;

第二十章 更新和删除数据

  1. 更新数据
    为了更新(修改)表中的数据,可使用update语句,有两种方式使用update语句:
    • 更新表中特定行
    • 更新表中所有行
      基本的update语句有三部分组成,分别为:
    • 要更新的表
    • 列名和它们的新值
    • 确定要更新行的过滤条件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值