zoukankan      html  css  js  c++  java
  • SQL 基础

    简介

    SQL 是 Structure Query Language(结构化查询语言)的缩写,它是使用关系模型的数据库应用语言,由 IBM 在 20 世纪 70 年代开发出来,作为 IBM 关系数据库原型 System R 的原型关系语言,实现了关系数据库中的信息检索。
    20 世纪 80 年代初,美国国家标准局(ANSI)开始着手制定 SQL 标准,最早的 ANSI 于 1986 年完成,就被叫做 SQL-86.标准的出台使 SQL 作为标准关系数据库语言的地位得到了加强。SQL 标准目前几经修改,更趋完善。

    分类

    SQL 语句主要可以划分为 3 个类别:

    • DDL(Data Definition Language)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象。常用的语句关键字主要包括 create,drop,alter 等。
    • DML(Data Manipulation Language)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检索数据完整性。常用的关键字主要包括:insert、delete、update 和 select 等。
    • DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的关键字包括:grant、revoke 等。

    MySQL 默认数据库

    • information_schema:主要存储了系统中的一些数据库对象信息,比如用户表信息、列信息、权限信息、字符集信息、分区信息等。
    • mysql:存储了系统的用户权限信息。

    数据库的增删改查

    1. 增:create database test1
    2. 删:drop database test1
    3. 改:没有这样的需求,也没有这样的功能
    4. 查:show databases

    数据表的增删改查

    create table tablename(
    column_name_1 column_type_1 constraints,
    column_name_2 column_type_2 constraints,
    ...
    column_name_n column_type_n constraints)
    
    drop table tablename
    
    • 增加表字段:alter table tablename add [column] column_definition [first | after col_name]。例如:alter table t_emp add column age int(3);
    • 删除表字段:alter table tablename drop [column] col_name。例如:alter table t_emp drop column age;
    • 修改表类型:alter table tablename modify[column] column_definition [first | after col_name]。例如:alter table t_emp modify ename varchar(20);
    • 修改字段名:alter table tablename change[column] old_col_name column_definition [first | alter col_name]。例如:alter table t_emp change age age1 int(4);。(change 和 modify 都可以修改表字段,不同的是 change 后面需要写两次列明,不方便,但是 change 的优点是可以修改列名称,modify 则不能)
    • 修改表名称:alter table tablename rename [to] new_tablename。例如:alter table t_emp rename new_emp;
    desc tablename;
    show create table emp;
    

    索引的增删改查


    1. 普通索引:alter table tablename add index index_name(column1, column2, ..., columnn)
      唯一索引:alter table tablename add unique index index_name(column1, column2, ..., columnn)
      主键索引:alter table tablename add primary key(column1, column2, ..., columnn)


    2. 普通索引:alter table tablename drop index index_name
      主键索引:alter table tablename drop primary key

    3. 改:索引有改操作吗?现在还不知道


    4. show index from tablename
      show keys from tablename

    数据的增删改查

    1. 增:就是 insert 了。可空字段、非空但有默认值字段、自增字段,insert 语句里均可不设置,它们会被自动设置为:NULL、默认值、自增的下一个数据。还有,insert 语句可以一次性插入多条记录,语法如下:
    insert into tablename(field1, field2, ..., fileldn) values
    (record1_value1, record1_value2, ..., record1_valuen),
    (record2_value1, record2_value2, ..., record2_valuen),
    ...
    (recordn_value1, recordn_value2, ..., recordn_valuen),
    ;
    

    这个特性可以使用 MySQL 在插入大量记录时,节省很多的网络开销,大大提高插入效率。

    1. 删:就是 delete 了。可以一次删除多个表的数据,语法:delete t1, t2, ..., tn from t1, t2, ..., tn [where condition]。例如:delete a, b from emp a, dept b where a.deptno=b.deptno and a.deptno=3;。不管是单表还是多表,不加 where 条件将会把所有记录删除。

    2. 改:就是 update 了。可以一次更改多个表的数据,语法:update t1, t2, ..., tn set t1.field1=expr1, tn.fieldn=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. 查:就是 select 了。limit 关键字用法:select ...[limit offset_start, row_count],其中 offset_start 表示记录的起始偏移量(默认为 0,所以这个参数可以不写),row_count 表示显示的行数。其他查询内容较多,下面分开写。

    聚合查询

    语法:

    select [field1, field2, ..., fieldn] fun_name from tablename [where where_condition] 
    [group by field1, field2, ..., fieldn
    [with rollup]
    [having where_condition]
    

    fun_name 表示要做的聚合操作,也就是聚合函数,常用的有 sum, count(*), max, min。
    group by 关键字表示要进行聚合的字段。
    with rollup 是可选语法,表明是否对分类聚合后的结果进行再汇总。
    having 关键字表示对分类后的结果再进行条件的过滤。
    注意:having 和 where 的区别在于,having 是对聚合后的结果进行条件的过滤,而 where 是在聚合前就对记录进行过滤,如果逻辑允许,我们尽可能用 where 先过滤记录,这样因为结果集减小,将会聚合的效率大大提高,最后再根据逻辑看是否用 having 进行再过滤。

    连接查询

    连接查询,分为:内连接和外连接。它们的主要区别是,内连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录。我们常用的是内连接。语法区别是:内连接不用 join,条件用 where;外连接使用 join,条件用 on。
    内连接语法:select ename, deptname from emp, dept where emp.deptno=dept.deptno;
    外连接又分为左连接,右连接。语法:select ename, deptname from emp left join dept on emp.deptno=dept.deptno;

    子查询

    用于子查询的关键字主要包括:in, not in, =, !=, exists, not exists 等。
    例如:select * from emp where deptno in (select deptno from dept);
    如果子查询记录数唯一,还可以使用 = 代替 in:select * from emp where deptno = (select deptno from dept limit 1);

    联合查询

    将多个(不止两个哦) select 语句查询的结果进行汇总。语法:

    select * from t1 
    union union all
    select * from t2
    ...
    union  union all
    select * from tn;
    

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

    DCL 语句

    DCL 语句主要是 DBA 用来管理系统中的对象权限时使用,一般的开发人员很少使用。哎,这是我这次学习 MySQL 最感兴趣的地方了,无奈这一章没有详细介绍,以后有详细介绍的时候再学习吧!

    帮助

    命令行登录 MySQL 后,有内置帮助文档命令,详细内容请看登录后的提示语。学习使用官方内置帮助文档才是王道啊。

    • 按照层次查看帮助:从 ? contents 命令开始
    • 快速查阅帮助:例如: ? show? create database

    元数据

    数据库 information_schema 用于记录 MySQL 中的元数据信息。元数据指的是数据的数据,比如表名、列名、列类型、索引名等表的各种属性名称。这个库比较特殊,它是一个虚拟数据库,物理上并不存在相关的目录和文件;库里 show tables 显示的各种表也并不是实际存在的物理表,而全部是视图。下面列出一些较为常用的视图:

    • SCHEMATE:该表提供了当前 mysql 实例中所有数据库的信息,show databases; 的结果取之此表。
    • TABLES:该表提供了关于数据库中的表的信息(包括视图),详细表述了某个表属于哪个 schema、表类型、表引擎、创建时间等信息。show tables from schemaname 的结果取之词表。
    • COLUMNS:该表提供了表中的列信息,详细表述了某张表的所有列以及每个列的信息。show columns from schemaname.tablename 的结果取之此表。
    • STATISTICS:该表提供了关于表索引的信息。show index from schemaname.tablename 的结果取之此表。
  • 相关阅读:
    关于sencha touch中给文本添加焦点无效的解决方案
    sencha touch 入门系列 (五)sencha touch运行及代码解析(上)
    关于用phonegap 3.0+ 打包后sencha touch按钮点击切换动画延迟接近一秒的以及界面闪烁的解决方案
    Building a Simple User Interface(创建一个简单的用户界面)
    Running Your App(运行你的应用程序)
    android GridLayout布局
    Android Studio SVN的使用
    Android Library项目发布到JCenter最简单的配置方法
    AndroidStudio项目提交(更新)到github最详细步骤
    Android RecyclerView的使用
  • 原文地址:https://www.cnblogs.com/craftsman-gao/p/7141149.html
Copyright © 2011-2022 走看看