DML数据操作语言

DML: 数据操作语言
INSERT, DELETE, UPDATE, SELECT 常用的语句,增、删、改、查;

    INSERT:
        一次插入一行或多行数据;
        Syntax:
        INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
            [INTO] tbl_name [(col_name,...)]
            {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
            [ ON DUPLICATE KEY UPDATE
              col_name=expr
                [, col_name=expr] ... ]

        mysql>  INSERT tbl_name [(col1,...)] VALUES (val1,...), (val21,...)
    例如: mysql> INSERT INTO student (name,sex,register_date) VALUES (‘Jinjiao‘,‘M‘,‘2019-01-29‘);
        Query OK, 1 row affected (0.01 sec)
            mysql> SELECT * FROM student;
            +----+----------+---------------+------+
            | id | name     | register_date | sex  |
            +----+----------+---------------+------+
            |  1 | ZhanYang | 2018-06-20    | NULL |
            |  4 | LiuJia   | 2018-05-30    | NULL |
            |  8 | JiaLiu   | 2018-06-20    | NULL |
            |  9 | JiaLiu   | 2018-04-20    | NULL |
            | 10 | gaoyf    | 2018-04-20    | NULL |
            | 11 | zhujh    | 2018-04-20    | NULL |
            | 12 | zhouha   | 2018-04-20    | NULL |
            | 13 | hanzb    | 2018-04-21    | M    |
            | 16 | ZhanXing | 2018-05-21    | M    |
            | 17 | XingYan  | 2018-05-21    | M    |
            | 18 | Jinjiao  | 2019-01-29    | M    |
            +----+----------+---------------+------+
            11 rows in set (0.00 sec)

        Or:

        INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
            [INTO] tbl_name
            SET col_name={expr | DEFAULT}, ...
            [ ON DUPLICATE KEY UPDATE
              col_name=expr
                [, col_name=expr] ... ]
    例如: mysql> INSERT INTO student SET name=‘Yinjiao‘,sex=‘F‘,register_date=‘2019-01-28‘;
            Query OK, 1 row affected (0.01 sec)
        Or:

        INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
            [INTO] tbl_name [(col_name,...)]
            SELECT ...
            [ ON DUPLICATE KEY UPDATE
              col_name=expr
                [, col_name=expr] ... ]

    DELETE:

        DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
            [WHERE where_condition]        #如果不指where条件,该表会被清空
            [ORDER BY ...]
            [LIMIT row_count]

        注意:一定要有限制条件,否则将清空表中的所有数据;
            限制条件:
                WHERE
                LIMIT

    UPDATE:

        UPDATE [LOW_PRIORITY] [IGNORE] table_reference
            SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
            [WHERE where_condition]
            [ORDER BY ...]
            [LIMIT row_count]
        mysql> UPDATE student SET age=100 WHERE id=19;

        注意:一定要有限制条件,否则将修改所有行的指定字段;
            限制条件:
                WHERE
                LIMIT

    SELECT: 

        Query Cache  #查询缓存,在查询结果确定时,才进行缓存。
        mysql> SELECT NOW();    #显示当前系统时间。

        查询执行路径中的组件:查询缓存、解析器、预处理器、优化器、查询执行引擎、存储引擎;

        SELECT语句的执行流程:
            FROM Clause --> WHERE Clause --> GROUP BY --> HAVING Clause --> ORDER BY --> SELECT --> LIMIT

        单表查询:
            SELECT
                [ALL | DISTINCT | DISTINCTROW ]
                  [SQL_CACHE | SQL_NO_CACHE]
                select_expr [, select_expr ...]
                [FROM table_references
                [WHERE where_condition]
                [GROUP BY {col_name | expr | position}
                  [ASC | DESC], ... [WITH ROLLUP]]
                [HAVING where_condition]
                [ORDER BY {col_name | expr | position}
                  [ASC | DESC], ...]
                [LIMIT {[offset,] row_count | row_count OFFSET offset}]
                [FOR UPDATE | LOCK IN SHARE MODE]

                DISTINCT: 数据去重;
                mysql> SELECT  DISTINCT sex FROM  student;
                +------+
                | sex  |
                +------+
                | NULL |
                | M    |
                | F    |
                +------+
                3 rows in set (0.00 sec)

                SQL_CACHE: 显式指定存储查询结果于缓存之中;
                SQL_NO_CACHE: 显式查询结果不予缓存;

                命中个数:mysql> SHOW GLOBAL VARIABLES LIKE ‘query%‘;
                +------------------------------+---------+
                | Variable_name                | Value   |
                +------------------------------+---------+
                | query_alloc_block_size       | 8192    |
                | query_cache_limit            | 1048576 |
                | query_cache_min_res_unit     | 4096    |
                | query_cache_size             | 1048576 |
                | query_cache_type             | OFF     |
                | query_cache_wlock_invalidate | OFF     |
                | query_prealloc_size          | 8192    |
                +------------------------------+---------+
                7 rows in set (0.00 sec)

                query_cache_type的值为‘ON‘时,查询缓存功能打开;
                    SELECT的结果符合缓存条件即会缓存,否则,不予缓存;
                    显式指定SQL_NO_CACHE,不予缓存;
                query_cache_type的值为‘DEMAND‘时,查询缓存功能按需进行;
                    显式指定SQL_CACHE的SELECT语句才会缓存;其它均不予缓存;

                缓存命中率查询:mysql> SHOW GLOBAL STATUS LIKE ‘Qcache%‘;
                +-------------------------+---------+
                | Variable_name           | Value   |
                +-------------------------+---------+
                | Qcache_free_blocks      | 1       |
                | Qcache_free_memory      | 1031352 |
                | Qcache_hits             | 0       |
                | Qcache_inserts          | 0       |
                | Qcache_lowmem_prunes    | 0       |
                | Qcache_not_cached       | 63      |
                | Qcache_queries_in_cache | 0       |
                | Qcache_total_blocks     | 1       |
                +-------------------------+---------+
                8 rows in set (0.00 sec)

                mysql> SHOW GLOBAL STATUS LIKE ‘Com_se%‘;
                +----------------+-------+
                | Variable_name  | Value |
                +----------------+-------+
                | Com_select     | 75    |
                | Com_set_option | 0     |
                +----------------+-------+
                2 rows in set (0.00 sec)

            字段显示可以使用别名:
                col1 AS alias1, col2 AS alias2, ...

            WHERE子句:指明过滤条件以实现“选择”的功能:
                过滤条件:布尔型表达式;

                算术操作符:+, -, *, /, %
                比较操作符:=, !=, <>, <=>, >, >=, <, <=
                mysql> SELECT name,age,id FROM student WHERE age >10;
                mysql> SELECT name,age,id FROM student WHERE age+10 >10;

                    BETWEEN min_num AND max_num     #取值区间
                    IN (element1, element2, ...)    #等值或条件表达式
                    mysql> SELECT name,age,id FROM student WHERE age  IN (18,100);
                    IS NULL                         #表达式取值为空
                    mysql> SELECT name,age,sex FROM student WHERE sex  IS NULL;
                    IS NOT NULL                     #表达式取值不为空
                    LIKE:
                        %: 任意长度的任意字符;
                        _:任意单个字符;
                    RLIKE:
                    REGEXP:匹配字符串可用正则表达式书写模式;

                逻辑操作符:

                    NOT #|
                    AND #&&
                    OR  #|| 或
                    XOR #亦或,二者不同则为真,相同则为假

            GROUP:根据指定的条件把查询结果进行“分组”以用于做“聚合”运算:
                avg(), max(), min(), count(), sum()
            mysql> SELECT * FROM student GROUP BY sex;
            mysql> SELECT avg(age) FROM student GROUP BY sex;

                HAVING: 对分组聚合运算后的结果指定过滤条件;
            mysql> SELECT avg(age) as aage,sex FROM student GROUP BY sex HAVING aage>20;
                #aage 定义的字段别名
            mysql> SELECT count(id) AS NOS FROM student GROUP BY id;
            mysql> SELECT count(id) AS NOS,id FROM student GROUP BY id;
            mysql> SELECT count(id) AS NOS,id FROM student GROUP BY id HAVING NOS>2;

            ORDER BY: 根据指定的字段对查询结果进行排序;
                默认为升序
                升序:ASC
                降序:DESC
            mysql> SELECT count(id) AS NOS,id FROM student GROUP BY id HAVING NOS>2 ORDER BY NOS;
            mysql> SELECT count(id) AS NOS,id FROM student GROUP BY id HAVING NOS>2 ORDER BY age DESC;

            LIMIT [[offset,]row_count]:对查询的结果进行输出行数数量限制;
            #offset 偏移量  #row_count 显示多少行
            mysql> SELECT count(id) AS NOS,id FROM student GROUP BY id LIMIT 10;
            +-----+----+
            | NOS | id |
            +-----+----+
            |   1 |  1 |
            |   1 |  4 |
            |   1 |  8 |
            |   1 |  9 |
            |   1 | 10 |
            |   1 | 11 |
            |   1 | 12 |
            |   1 | 13 |
            |   1 | 16 |
            |   1 | 17 |
            +-----+----+
            10 rows in set (0.00 sec)

            mysql> SELECT count(id) AS NOS,id FROM student GROUP BY id LIMIT 10,10;
            +-----+----+
            | NOS | id |
            +-----+----+
            |   1 | 18 |
            |   1 | 19 |
            |   1 | 20 |
            +-----+----+
            3 rows in set (0.00 sec)

            对查询结果中的数据请求施加“锁”:
            [FOR UPDATE | LOCK IN SHARE MODE]]
                FOR UPDATE: 写锁,排他锁,独占锁;
                LOCK IN SHARE MODE: 读锁,共享锁

多表查询:
交叉连接:笛卡尔乘积;
mysql> SELECT FROM student,study_record;
内连接:
等值连接:让表之间的字段以“等值”建立连接关系;
mysql> SELECT
FROM students,teachers WHERE student,TeacherID=teachers.TID
不等值连接
自然连接
自连接
外连接:
左外连接:
FROM tb1 LEFT JOIN tb2 ON tb1.col=tb2.col
右外连接
FROM tb1 RIGHT JOIN tb2 ON tb1.col=tb2.col

        子查询:在查询语句嵌套着查询语句
            基于某语句的查询结果再次进行的查询

            用在WHERE子句中的子查询:
                (1) 用于比较表达式中的子查询;子查询仅能返回单个值;
                    mysql> SELECT Name,Age FROM students WHERE Age>(SELECT avg(Age) FROM students);
                    mysql> SELECT avg(age) FROM student WHERE age>(SELECT avg(age) FROM student);
                (2) 用于IN中的子查询:子查询应该单键查询并返回一个或多个值从构成列表;
                    mysql> SELECT Name,Age FROM students WHERE Age IN (SELECT Age FROM teachers);
                (3) 用于EXISTS;

            用于FROM子句中的子查询;
                使用格式:SELECT tb_alias.col1,... FROM (SELECT clause) AS tb_alias WHERE Clause;
                示例:
                mysql> SELECT s.aage,s.ClassID FROM (SELECT avg(Age) AS aage,ClassID FROM students WHERE ClassID IS NOT NULL GROUP BY ClassID) AS s WHERE s.aage>30;

        联合查询:UNION
            mysql> SELECT Name,Age FROM students UNION SELECT Name,Age FROM teachers;

原文地址:http://blog.51cto.com/zhanx/2348162

时间: 2024-10-29 19:05:58

DML数据操作语言的相关文章

数据存储——SQLite语句之DML 数据操作语言和内置函数之聚合函数

一.连接查询之内连接 select   a.字段,b.字段   from   表1   a,表2   b    where   a.字段=b.字段  And ... 二.DML 数据操作语言 1.增  insert  into values 1-insert  into 表名  values (跟所有字段一一对应的值的列表) 2-insert  into 表名(字段列表)  values (跟字段列表一一对应的值的列表) 3-insert  into 表名  select  对应的字段列表  f

数据存储——SQLite数据库存储——SQL语句——DML数据操作语言、内置函数聚合函数

一.连接查询之内连接 select   a.字段,b.字段   from   表1   a,表2   b    where   a.字段=b.字段  And ... 二.DML 数据操作语言 1.增  insert  into values 1-insert  into 表名  values (跟所有字段一一对应的值的列表) 2-insert  into 表名(字段列表)  values (跟字段列表一一对应的值的列表) 3-insert  into 表名  select  对应的字段列表  f

6.1课堂笔记—DML(数据操作语言),DQL查询语句

一.DML(数据操作语言) InnoDB MyISAM 支持事务 不支持事务 不支持全文索引 支持全文索引 支持外键约束 不支持 命令查看默认存储引擎 show variables like '%storage_engine%'; 1.表中插入数据 #添加课程 INSERT INTO `subject` VALUES (5,'C#',160,1); #插入多门课程 INSERT INTO `subject`(subjectName,classHour,gradeID) VALUES ('数学',

SQL入门-DML数据操作语言

DML数据操作语言 1.针对数据行的操作 加大 -U 使用严格模式,限制update 和where语句 mysql -uroot -p -U 严格模式下删除数据需要使用索引,作为条件才能删除 mysql> delete from anyux.test; ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column--

SQL DML数据操作语言 教程

数据操作语言(Data Manipulation Language)用于操作表中的数据,包括插入(INSERT).修改(UPDATE).删除(DELETE)以及合并(MERGE).虽然我们使用最多的是查询语句,但生成数据是进行查询分析的前提:应用程序通常也需要使用 DML 语句进行业务数据的操作. SQL 数据操作语言 SQL DML增加数据 SQL DML修改数据 SQL DML删除数据 SQL DML合并数据 原文地址:https://www.cnblogs.com/numpycomcn/p

DML数据操作语言之查询(二)

当我们查询出了N条记录之后 ,我们知道一共是几条记录,或者这些记录某一字段(列值)的最大值,最小值,平均值等,就可以使用聚合函数. 1.聚合函数 聚合函数会将null 排除在外.但是count(*)例外,并不会排除null. 常用的聚合函数有 5个 :               聚合函数 用在select子句中 count(列名)     :   计算表中的数据行数 使用 count(*)  会查出 包含null在内的全部数据行数 . 使用count(某列名) 会查出  该列不包含null在内

MySQL数据库 DML 数据操作语言

insert语句添加数据: insert into 表名 (字段名 1,字段名 2,...)values(值 1,值 2, ...); 为表中所有字段添加数据 insert into 表名 (值 1,值 2,...);    不指定字段名 insert into 表名 (字段名 1,字段名 2,...)values(值 1,值 2, ...); 为表中指定的字段添加数据 insert into 表名 [(字段名 1,字段名 2,...)] values(值 1,值 2,...),(值 1,值 2

DML数据操作语言练习

--创建表T_HQ_BM2 --create table t_hq_bm2 as select * from t_hq_bm; commit; --添加行内容 --insert into t_hq_bm2 values ('107','研发部','147258369'); commit; --删除部门编码为107的行 --delete t_hq_bm2 where bumenbm = '107'; commit; --添加行内容 --insert into t_hq_bm2 (bumenbm,l

Oracle基础(十) DML数据操作

一.DML数据操作语言 主要用于检索.插入和修改数据库信息.它是最常用的SQL命令,如INSERT(插入).UPDATE(更新).SELECT(选择).DELETE(删除). 1.INSERT插入语句: 语法: INSERT INTO tablename[column1[,column2...]] VALUES (value1[,value2...]); 说明: INSERT INTO:为插入的关键字. tablename:表示要插入的表. column1:可选参数,表示要插入的列,多个列使用,