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. linux下安装jdk&&Tomcat环境

    linux系统 Centos6 下部署应用服务 jdk-1.7 环境安装:(切换到root用户下操作)1. 在 /usr/local 目录下创建jdk7文件 mkdir /usr/local/jdk7 ...

  2. mongodb - schema中格式时间

       date:{ type: String,        default: () => moment(new Date()).format('YYYY-MM-DD HH:mm:ss'),   ...

  3. cf 757C. Felicity is Coming!

    这个题还是比较劲的(题意太神了),才知道vector还可以==和排序,扒题解大法好!! #include<bits/stdc++.h> #define lowbit(x) x&(- ...

  4. HDU 4902 Nice boat 多校4 线段树

    给定n个数 第一个操作和普通,区间覆盖性的,把l-r区间的所有值改成固定的val 第二个操作是重点,输入l r x 把l-r区间的所有大于x的数,变成gcd(a[i],x) a[i]即指满足条件的序列 ...

  5. 由sqli-labs/Less-5学习各种基础盲注技巧

    本文为本人在学习中的总结,仅涉及基础的盲注技巧,可能多有疏漏之处,欢迎指教. 另外本人博客的SQL注入分类下有一些方面的详细讲解,在此只介绍简单的使用. 0x00.介绍一下本人对盲注的总结. 盲注就是 ...

  6. ACM-AK吧!少年

    题目描述:AK吧!少年 AK is an ACM competition finished all of the problems. AC This problem is one of the ste ...

  7. ls 查看文件

    1.按文件大小查看文件 a.降序:ls -lsh moudaen@morton:~$ ls -lshtotal 20M 20M -rw-r--r-- 1 moudaen 65536  20M Nov ...

  8. HDU - 1200 To and Fro

    题意:给定一个,其实是由一个图按蛇形输出而成的字符串,要求按从左到右,从上到下的顺序输出这个图. 分析: 1.把字符串转化成图 2.按要求输出图= = #include<cstdio> # ...

  9. yarn storm spark

    单机zookeeper http://coolxing.iteye.com/blog/1871009 storm http://os.51cto.com/art/201309/411003_2.htm ...

  10. 汇编,寄存器,内存,mov指令

    一.代码 和 汇编 和 二进制之间的关系 二.复习一下计算机组成原理的知识 1.寄存器 计算机中有三个存储 32位cpu提供的寄存器有三种类型8位 16位 32位 64位的只是32位的扩展 并且程序大 ...