zoukankan      html  css  js  c++  java
  • sql 语句杂记

    数据库操作

    创建数据库    [] 表示可选内容

    create database db_name [数据库选项];

    数据库查询

    查看当前数据库  show database

    查看数据库创建语句: show create database db_name 

    数据库删除 

     drop database db_name 

    修改数据库属性 

    alter database db_name [修改指令]    

    表操作

    数据库是表的容器,操作表要指定数据库   可以通过  db_name.table_name ,也可以通过指定当前的默认数据库 来省去 指明库名 use db_name 

    创建表

    create table tb_name (列结构) [表选项]

    先分析,需要保存的实体数据拥有哪些属性  

    例子: create table db.math_class (class_no varchar(50),date_start date);

    [tips] 如果库名或者表名是特殊字符或关键字 要用‘ ’ 括起来 

    查看表

    有哪些表 

    show tables [like patten];  example :show tables like ‘exam_%’

    查看创建表信息 

    show create tables table_name;

    删除表 

    drop table if exists table_name;

    delete from table_name where 1=1;  (只是清空)

    修改表 

    修改表名  rename table table1 to table2 ;

    修改列定义: add,modify,change,drop 

    1增加列 example: alter table tb_name add height int;

    2删除列 example:alter table tb_name drop height;

    3修改列 example:alter table tb_name modify height varchar(20);

    4重命名 example: alter table tb_name change socre fenshu int;

    数据操作

    创建数据(插入)

    获得数据(查询)

    删除数据

    修改数据 

    插入:可省字段列表,但值的顺序应与字段列表顺序一致 

    insert [into] 表名 [字段列表] values  [值列表];

    example:insert [into] exam_stu (name,stu_no) values ('aa','201402183');

    查询:  

    [tips] 与查询配合的操作选项 

    order by (字段1,字段2) [asc或desc]  查询结果按照升序降序排序

    group by 按组查询   这就是需要注意的一点,应用group by时 ,在select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中,

    也就是说group by 必须单配聚合函数使用。

    limit 数量 ;限制查询记录数量

    distinct 去掉重复记录   select distinct 字段1 ,字段2 from 表 where 条件

    select 字段列表 from 表名 查询条件;

    example : select * from exam_stu;  

          select * from exam_stu where score>=60;

            select name,stu_no from exam_stu; 

    * 是通配符 代表所有字段 ,条件不写相当于  where 1=1 

    删除 

    delete from 表名 条件

    delete from exam_stu where score<60; 不写条件就删除所有数据 慎重 

    修改  

    update 表名 set 字段=新值 ,字段2=新值,....   where 条件  

    example : update ex_stu  set score = 99 where score >88;

    列属性(约束)

    1 是否为空 :规定一个字段是否可以为空 

    NULL 、NOT NULL 

    2默认值 default , create table tb_exam (a varchar(10 ) default 'aa');

    3主键 :primary key,唯一索引 ,可以设置成实体的属性,但常常与实体的信息不相关

      1设置成字段 create table teacher (t_id int primary key ,t_name char);

      2设置组合主键: 一个主键包含多个字段:create table teacher (t_name varchar(50),t_class int,primary key (t_name,t_class));

     设置主键自动增长 :不同数据库不相同 。sql server identity(1,1) :1开始每次+1

    实体之间的关系 

    1 1对1的关系

    设计

    两个实体表内,存在相同的主键字段,如果一个表1的主键=表2的主键值,这两个表1:1对应  

    2 1对多 1:n 最常见

    设计

    在多的哪端增减一个属性字段用于指向该实体1的那端的主键标识

    3 多对多 N:M

    设计

    用一个中间表来实现  1:m ,1:n

    外键约束 foreign key 

    概念:如果一个实体的某个字段指向另一个实体的主键,就称某关键字为另一个表的外键 ,换言之:某个表的外键就是指另外一个表中的主键 。

    以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。

    作用:用于约束关系内的实体

    语法 foreign key (本表外键字段) references  父表(父表主键) 

    example: create table class (class_id int primary key,class_name varchar(20) not null default 'chusanyiban' conment '班级'); 主表 

          create table class_stu(stu_id int primary key,stu_name varchar(30) not null default ' ',class_id int ,foreign key (class_id) references class (class_id));子表

    设置级联操作 (关联动作)

      改动一个表去影响另一个表

      在主表数据改变时阈值关联的从表也作出相应的改变

      主表更新

      主表删除

      使用关键字   on update 

            on delete 

      允许的级联动作:

      cascade : set null 将关联从表字段设置为空

            restrict  表示拒绝相关操作

        alter table student add foreign key (class_id) references class (class_id) on delete set null ;

    联合查询 :将多条select 语句合并到一起 

      1 union 关键字联合两个select 

      example:(select 字段1,字段2 from 表 where 条件) union [all](select * from 表)

       [tips] 1 如果union 结果有重复记录会消除重复 ,可以通过添加 选项 all 查询所有结果

        2 子语句必须在括号内 

       

    子查询 

      分类 : 1按照位置 where  from  select 

          2 按照返回类型  集合(列,行) 标量 

    场景: 获得带过 123班老师的信息  

    分析:先获得带过123班的老师,在获得他们的信息  

    select  t_name ,t_class from teacher_class where t_name in (select t_name from teacher_class where c_name = '123');  集合子(列)查询  in 关键字

    select t_name ,gender ,c_name from teacher_class where (gender,c_name)=(select distinct gender ,c_name from teacher_class where t_name='lisi')

       集合子查询  要配合 in、not in 、=any()、!=all()、!=any()

      表子查询,

      使得复杂的检索条件可以分布做

      [tips] 必须用as 给临时表起名字 ,as可以给变量或者表取别名, like 模糊查找 %通配符

      select * from (表子查询)where 条件 ; example : select * from (select t_name,days from class where days>20)as temp where t_name like ‘李%’;

      exists (子查询 )  

      判断依据如果子查询可以返回数据 ,则exists为真,否则为假的、

      example:select * from teacher where exists (select * from teacher where class_id=t_id)

    连接查询 (重要)

      select  join  

      将多张表记录连接起来,多张表一起使用,使之成为一张表 

      连接分类 :外连接,内连接,自然连接 

     内连接  :查询 结果不允许存在连接不到的数据

    inner join 等同于Where查询如:
    Select * From A, B Where A.aid = B.bid

     语法:tb_left inner join tb_right on 连接条件  

    Select * From A inner join B on A.aid = B.bid;
    这里只显示出了 A.aid = B.bid的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录。

    外连接:结果允许存在连接不到的数据 

     语法  left join  right join  

     left  join    :

    Select * From A left join B on A.aid = B.bid;
    left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的。 换句话说,左表A的记录将会全部表示出来,而右表B只会显示符合搜索条件的记录(例子中为: A.aid = B.bid),B表记录不足的地方均为NULL.

    自然连接

      不写连接条件  natural join  

    select * from one natural join two ;

    _________________________________________________________________

      insert 增加数据  使用细节  

       一般语法 :insert into tb_name (字段列表) values (值列表);

      * 如果 插入部分值可以用set语法 

      insert into tB_name set t_name=‘张三’,c_name=‘武术’;

      * 一次插入多条数据 ,先用()构造数据记录列表

      insert into tb (t_name,c_name) values ('张三风',‘太极剑’),(‘杨过’,‘黯然销魂掌’);

      *解决插入主键冲突 ,主键冲突则替换,否则正常插入

      replace into 表明 values (主键,字段值1,2)

     

       

      

      

  • 相关阅读:
    [剑指 Offer 18. 删除链表的节点]
    [922. 按奇偶排序数组 II]
    [905. 按奇偶排序数组]
    Linux信号机制
    [1470. 重新排列数组]
    linux常用命令全称
    pidof查看服务的PID
    运行shell脚本提示syntax error near unexpected token `$'do ''
    influxdb安装
    jvm堆内存设置问题Java heap space、GC overhead limit exceeded
  • 原文地址:https://www.cnblogs.com/wangjian920110/p/5458667.html
Copyright © 2011-2022 走看看