1.插入记录

  INSERT INTO tablename

  (fields1, fields2, ..., fieldsn)

  VALUES

  (value1, value2, ..., valuen)

  例: 

    INSERT INTO emp

    (emp, hiredate, sal, deptno)

    VALUES

    ('zzxl', '2000-01-01', '2000', 1)

    可以不指定字段名称,但是 values 后面的顺序还应该和字段的排列顺序一致

  一次性插入多条记录

    INSERT INTO tablename

    (fields1, fields2, ..., fieldsn)

    VALUES

    (value11, value12, ..., value1n),

    (value21, value22, ..., value2n),

     ...

    (valuen1, valuen2, ..., valuenn)

  例:

    INSERT INTO emp

    (emp, hiredate, sal, deptno)

    VALUES

    ('zs', '2003-01-01', '2000', 2),

    ('ls', '2005-01-01', '2000', 3)

2.更新记录

  UPDATE tablename

  SET   field1=value1,field2=value2,...,fieldn=valuen

  [WHERE CONDITION]

  例:

    UPDATE emp

    SET   ename='wem'

    WHERE  ename='zzxl'

  同时更新多个表中数据

  UPDATE t1,t2,...,tn

  SET   t1.field1=expr1,...,tn.field2=exprn

  [WHERE CONDITION]

  例:

    UPDATE emp a, dept b

    SET   a.sal=a.sal*b.deptno,b.deptname=a.ename

    WHERE  a.deptno=b.deptno

3.删除记录

  DELETE FROM tablename

  [WHERE CONDITION]

  例:

    DELECT FROM emp

    WHERE  ename='dony'

  一次删除多个表的数据

  DELETE t1,t2,...,tn

  FROM    t1,t2,...,tn

  [WHERE  CONDITION]

  如果 FROM 后面的表名用别名,则 DELETE 后面也要用相应的别名,否则会提示语法错误。

  例:

    DELETE a, b

    FROM    emp a, dept b

    WHERE  a.deptno=b.deptno

    AND  a.deptno=3

4.查询记录

  SELECT *

  FROM    tablename

  [WHERE CONDITION]  

  例:

    SELECT *

    FROM    emp

  查询不重复的记录

  SELECT DINTINCT field1,field2,...,field3

  FROM    tablename

  [WHERE CONDITION]

  例:

    SELECT DISTINCT deptno

    FROM  emp

  条件查询

  WHERE 条件后面可以使用=, >, <, >=, <=, != 等比较运算符;多个条件之间还可以使用 OR, AND等逻辑运算符进行多条件联合查询

  排序和限制

  SELECT *

  FROM  tablename

  [WHERE CONDITION]

  [ORDER  BY field1 [DESC|ASC],

         field2 [DESC|ASC],

         ...

         fieldn [DESC|ASC]]

  DESC表示按照字段进行降序排列,ASC表示升序排列[默认排序].

  例:

    SELECT *

    FROM    emp

    ORDER BY sal

  部分显示

  SELECT ...

  [LIMIT offset_start, row_count]

  offset_start表示起始偏移量,row_count表示行数。

  默认情况下起始偏移量为0,只要写记录数就可以。

  limit经常和order by一起配合使用来进行记录的分页显示。

  聚合

  很多情况下,用户需要进行一些汇总操作,比如统计整个公司的人数或者统计每个部门的人数。这时就要用到SQL的聚合操作。

  SELECT [field1, field2, ..., fieldn] FUN_NAME

  FROM  table_name

  [WHERE CONDITION]

  [GROUP  BY field1, field2, ..., fieldn

   WITH    ROLLUP]]

  [HAVING where_condition]

  FUN_NAME表示要做的聚合操作,也就是聚合函数,常用的有sum, count, max, min等。

  GROUP BY表示要进行分类聚合的字段,比如要按照部门分类统计员工数量,部门就应该写在GROUP BY 后面。

  WITH ROLLUP 是可选语法,表明是否对分类聚合后的结果进行再汇总。

  HAVING关键字表示对分类后的结果再进行条件过滤。

  HAVING 和 WHERE 的区别在于,HAVING 是对聚合后的结果进行条件的过滤,而 WHERE 是在聚合前就对结果进行过滤,如果逻辑允许,我们尽可能先用

  WHERE进行过滤,这样因为结果集减小,将对聚合的效率大大提高,最后在根据逻辑看是否用 HAVING 进行再过滤。

  例:(统计各部门人数)

    SELECGT deptno, count(*) total

    FROM      emp

    GROUP BY deptno

  例:(统计各部门人数,及总人数)

    SELECT deptno, count(*) total

    FROM    emp

    GROUP BY deptno

    WITH ROLLUP

  例:(统计人数大于1的部门)

    SELECT deptno, count(*) total

    FROM    emp

    GROUP BY deptno

    HAVING total>1

  例:(统计公司所有员工的薪水总额,最高和最低薪水)

    SELECT SUM(sal), MAX(sal), min(sal)

    FROM    emp

  表连接

  当需要同时显示多个表中的字段时,就可以用表连接来实现这样的功能。

  从大类上分,表连接分为内连接和外连接,他们之间最主要的区别是,内连接仅选出两张表中互相匹配的记录,

  而外连接会选出其他不匹配的记录。我们常用的是内连接。

  例:

    SELECT ename, deptname

    FROM  emp, dept

    WHERE emp.deptno=dept.deptno

  外连接又分为左连接和右连接。

  左连接:包含所有的左边表中的记录甚至是右边表中没有和他匹配的记录。

  右连接:包含所有的右边表中的记录甚至是左边表中没有和他匹配的记录。

  SELECT ...

  FROM    ...

  [LEFT|RIGHT] JOIN ... ON

  ...

  例:

    SELECT ename, deptname

    FROM  emp

    LEFT JOIN dept ON

    emp.deptno=dept.deptno

    SELECT ename, deptname

    FROM  dept

    RIGHT JOIN emp ON

    emp.deptno=dept.deptno

  子查询

  某些情况下,当进行查询的时候,需要的条件是另外一个 SELECT 语句的结果,这个时候,就要用到子查询。

  用于子查询的关键字主要包括 IN, NOT IN, =, !=, EXISTS, NOT EXISTS

  例:

    SELECT *

    FROM  emp

    WHERE deptno

      IN (

      SELECT deptno

      FROM    dept)

    如果子查询记录数唯一,还可以用 = 代替 IN

    对于不唯一的查询记录可使用limit控制查询记录为唯一。(有需求的话)

    某些情况下,子查询可以转化为表连接。

    表连接在很多情况下用于优化子查询。

  记录联合

  我们经常碰到这样的应用,将两个表的数据按照一定的查询条件查询出来以后,将结果合并到一起显示出来。

  这个时候就需要用到 UNION 和 UNION ALL 来实现这样的功能.

  SELECT *

  FROM  t1

  UNION|UNION ALL

  SELECT *

  FROM    t2

  ...

  UNION|UNION ALL

  SELECT *

  FROM    tn

  例:

    SELECT deptno

    FROM  emp

    UNION   ALL

    SELECT deptno

    FROM  dept

    

    SELECT deptno

    FROM  emp

    UNION

    SELECT deptno

    FROM  dept

    UNION 和 UNION ALL 的主要区别是 UNION ALL是把结果集直接合并在一起,而 UNION 是将 UNION ALL 后的结果进行一次 DISTINCT,去除重复记录后的结果。

    使用的时候需要保持列数相同。

MySQL--基础SQL--DML的更多相关文章

  1. mysql 基础sql语法总结 (二)DML

    二.DML(增.删.改) 1)插入数据 第一种写法:INSERT INTO 表名 (列名1,列名2,,......)VALUES(列值1,列值2,......) 第二种写法:INSERT INTO 表 ...

  2. mysql基础sql进阶

    回顾前面的基础命令语句 修改数据表 添加字段: alter table 表名 add 字段名 列类型[not null|null][primary key][unique][auto_incremen ...

  3. mysql 基础sql语法总结(一)DDL

    mysql数据库: SQL数据库语言可分为四部分: 1.DDL:对数据库或表的进行操作结构操作 2.DML:对表的记录进行更新(增.删.改)* 3.DQL:对表的内容进行查询 **(重难点) 4.DC ...

  4. MySQL基础之DML语句

    DML 语句 DML(Data Manipulation Language)语句:数据操纵语句. 用途:用于添加.修改.删除和查询数据库记录,并检查数据完整性. 常用关键字:insert.update ...

  5. mysql 基础sql语句

    1.mysqladmin语句:  # 查看mysql版本 mysqladmin version  # 更改root用户密码 mysqladmin -u root -p原密码 password '新密码 ...

  6. mysql基础SQL练习

    许久收藏的练习mysql语句的,现在看来任然有学习价值! 表如下: Student(Sid,Sname,Sage,Ssex) 学生表 Course(Cid,Cname,Tid) 课程表 SC(Sid, ...

  7. MySQL基础SQL命令---增删改查

    1.表操作: create table tableName (id int(6) not null primary key auto_increatment,name varchar(10) not ...

  8. MySQL 基础 SQL 操作

    MySQL 用户 --登录 mysql -u<用户名> -p[密码] --修改密码 mysqladmin -u<用户名> -p[密码] password <new_pas ...

  9. MySQL基础整理(一)之SQL基础(未完成)

    大家好,我是浅墨竹染,以下是MySQL基础整理(一)之SQL基础 1.SQL简介 SQL(Structure Query Language)是一种结构化查询语言,是使用关系模型的数据库应用语言. 2. ...

  10. mysql使用基础 sql语句(一)

    csdn博文地址:mysql使用基础 sql语句(一)  点击进入 命令行输入mysql -u root -p,回车再输入密码,进入mysql. 终端命令以分号作为一条语句的结束,可分为多行输入,只需 ...

随机推荐

  1. POJ 3468 区间更新(求任意区间和)A Simple Problem with Integers

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 163977 ...

  2. Arch系linux配置Go开发环境

    1. 下载go $ sudo pacman -S go 下载后系统会将go安装在/usr/lib/go目录下 2. 配置一些环境变量 一共需要三个环境变量,分别为: GOROOT -> go语言 ...

  3. 官网英文版学习——RabbitMQ学习笔记(七)Topic

    在上一篇中使用直接交换器改进了我们的系统,使得它能够有选择的进行接收消息,但它仍然有局限性——它不能基于多个条件进行路由.本节我们就进行能够基于多个条件进行路由的topics exchange学习. ...

  4. MongoDB 副本集搭建

    搭建mongodb副本集 [root@ mongodb]# cd /u02 [root@ u02]# mkdir -p mongodb/data_2777 [root@ u02]# mkdir -p ...

  5. cf 762C. Two strings

    因为要删去1个串(读错题),所以就直接二分搞就好了. 需要预处理出2个分别从头到尾,或从尾到头需要多长a串的数组,然后二分删去多长就好了. #include<bits/stdc++.h> ...

  6. 十七、SAP中使用SQL语句读取一条数据

    一.需要说明的是SAP不同类型的结构体类型之间是不能随意赋值的,如果需要赋值,可以使用CORRESPONDING FIELDS OF关键字, 不同类型结构体中同名的成员会被赋值,代码如下: 二.输出代 ...

  7. Assignment写作谨慎学术抄袭是关键

    学术写作(Academic Writing)作为留学生涯的“必修课”,总是让闻者叹气,抓耳挠腮.初入课堂的留学生,更是缺乏写作经验不知从何下笔,只想仰天长啸“Essay真的好难啊!!”面对一个Essa ...

  8. ELK 安装Beat

    章节 ELK 介绍 ELK 安装Elasticsearch ELK 安装Kibana ELK 安装Beat ELK 安装Logstash Beat是数据采集工具,安装在服务器上,将采集到的数据发送给E ...

  9. NumPy 矩阵库函数

    章节 Numpy 介绍 Numpy 安装 NumPy ndarray NumPy 数据类型 NumPy 数组创建 NumPy 基于已有数据创建数组 NumPy 基于数值区间创建数组 NumPy 数组切 ...

  10. js面试之数组的几个不low操作

    1.扁平化n维数组 1.终极篇 [1,[2,3]].flat(2) //[1, 2, 3] [1,[2,3,[4,5]]].flat(3) //[1, 2, 3, 4, 5] [1,[2,3,[4,5 ...