sql语法 学习了解

sql 的分类:

    DDL: 数据定义语言  create drop alter         
    DML:  数据操作语言   记录
    DQL:数据查询语言 : 非官方的  查询语句
    DCL:数据控制语言  :  事物,管理

net start mysql

mysql -u用户名 -p密码

DDL: 数据库定义语言
        
        创建数据库: create database 数据库名称;   
        删除数据库:drop database 数据库名称;
        常用命令:  查看所有数据库 :  show databases; 
                            切换或者使用数据库:  user 数据库名称;

        操作表:    
                    创建表: create table 表名(字段描述,字段名称);
                                       字段描述: 字段名称,字段类型  [约束 ]
                                   create table user ( id Int  primary key  auto_increment , username varchar(20) )
                    查看所有表:  show tables;
                    查看表结构:  desc  表名;
                    看看建表语句: show create table  表名;

                    修改表名: alter table 表名(旧表名)  rename  to  表名(新表名);
                    添加字段:   alter  table  表名 add [column] 字段描述;
                                        例如: alter table user add password varchaer(20);
                    修改字段名称:   alter table 表名  change  字段名称(旧字段)  字段名称(新字段名称) 字段描述
                    修改字段描述: alter  table 表名  modify  字段名称   字段类型 [约束] ;
                    删除字段: alter table 表名  drop  字段名;
                    删除表:   drop  table  表名;


DML: 数据操作语言  关键字  insert  update   delete
            
        注意: 若字段类型为数字,可以省略引号,尽量别省略
    
          插入:  insert into  表名  values(字段值1,字段值2,字段值n);--默认插入所有字段,必须保证value后的类型和顺序要与键表结构顺序一致   
            
                       insert into 表名 (字段名,字段名)  values(字段值,字段值);--插入指定的值, 必须保证和创表的类型与顺序一致

            修改:  update 表名  set 字段名=字段值, 字段名1=字段值  [条件查询] ; 

            删除: delete from 表名  【where】;



DQL: 数据查询语言        
        select * form 表名  where  group by    having    order by  ase| desc    
    
        select * from 表名;
        select 字段名1, 字段名2   from  表名;
        select  distincet 字段名  from 表名 ;  //  distincet  去重的意思

        可以在查询的结果上进行运算,但是不影响数据库里面的值
        select 字段名 + 10 from 表名;
        
        起别名(给列或者字段别名)
        select 字段名 + 10  新别名  from 表名;   
         select 字段名 + 10  ’新别名‘  from 表名;     
         select 字段名 + 10  ·新别名·  from 表名;     
    
    条件查询
        
    select *from 表名 where 字段名=value;
    select *form 表名 where 字段名 > 20;
    select * from 表名  where 字段名 like 匹配规则    匹配个数, 匹配内容      //模糊查询
    select * from 表名  where 字段名 like ”__“    占2个位置
    select * from 表名  where 字段名 like %龙     
    select * from 表名  where 字段名 like 龙%
    select * from 表名  where 字段名 like %龙%
    select *form 表名 where 字段名 = 20 or 字段名 = 30 or  字段名=40;
    select *form 表名 where 字段名 in(20,30,40);
    select *form 表名 where 字段名 between 20 and 40;

    select *from 表名  order by 字段名  (asc升序, desc 降序)
    select * from 表名 where 字段名  like ”“  order by

    聚合函数 (忽略null值)
            
     sum()   avg()  max() min() count()
    获得总和
    select sum(字段名) from 表;
    
    获得平均数
    select avg(字段名) form 表名;
    round 函数,四舍五入
    select round(avg(字段名),2)from 表名;
    
    计算
    select count(*) form 表名   获得一共多少条记录


    分组  在where 后面  order by前面
    where 与 having区别
    where 是分组前的数据进行过滤,后面不能使用聚合函数
    having是分组后的数据进行过滤, 可以使用聚合函数
    select 字段名, count(*) from 表名 group by 字段名  ;  
    select 字段名, sum(字段名)   from 表名 group by 字段名; 
    select 字段名, sum(字段名)   from 表名 group by 字段名  having > 200; 


数据类型的问题

    mysql                java
  
   tinyInt                     byte
   smallInt                   short  
    Int                          int
    bigInt                     long     
    varchar                  varChar/char   (varChar 可变长度  char不可变长度)
     int                      boolean
    float                     float
    double(5,2)           double      注”:double(5,2) 改小数长度为5,小数占2位                                 
   date                       java.sql.Date
   time                        java.sql.Time
   timesTamp             java.sql.timesTamp
   dateTime  日期加+时间       无                        
    text (最大4g厂文件)     java.sql.clob()存长文本
    blob                             java.sql.blob() 存文二进制文件(电影)



约束: 

        作用:为了保证数据的有效性与完整性
        mysql常用约束:  primary  key 主键约束
                                    unique  唯一约束
                                    not null  非空
                                    foreign  key 外键约束

        主键约束:  修饰过过的字段唯一非空,一张表只能有一个主键,这个主键可以保函多个字段
                            方式1: 键表的同时添加约束          字段名称  字段类型 primary key                          
                            方式2: 键表的同时在约束区域添加约束          primary key(字段1,字段2)
                                           creat table user (
                                                        id int,
                                                        username varchar(20),
                                                        primary key(id)
                                            );
                              方式3: 添加完表之后,通过修改表结构,修改主键
                                              alter table 表名 add primary key(字段名1,字段名2)  (联合主键)


        唯一约束: 被修饰过的字段唯一, 对null值不起作用
                            方式1: 键表的同时添加约束          字段名称  字段类型 unique                        
                            方式2: 键表的同时在约束区域添加约束     unique(字段1,字段2)
                                           creat table user (
                                                        id int,
                                                        username varchar(20),
                                                        unique(id)
                                            );
                              方式3: 添加完表之后,通过修改表结构,修改主键
                                              alter table 表名 add unique(字段名1,字段名2)  (联合主键)

    非空约束: 被修饰的字段非空
                         creat table user (
                                                        id int  not null,
                                                        username varchar(20),                                                        
                                            );

    truncate: 清空表
                   格式: truncate 表名;  //清空表,重新创建一张新表
                                delete 属于逐条删除
    auto_increment : 要求, 被修饰的字段要满足自增,被修饰的字段必须是key,一般是primary key
                    

        


多表操作     

sql:

举例操作:网上商城

网上商城的实体:    
            
        1 用户
        
         2 订单

         3 商品 

         4分类

    常见关系:
                
            一对多关系: 用户和订单  分类和商品
            多对多关系: 订单和商品   
            一对一关系: 丈夫和妻子

            ER图,可以描述实体与实体的关系

    

         
     

        
    一对多关系: 一称之为主表  多称之为 从表   会在多表一份添加一个字段,字段名称称之为主表_id
                        与主表的主键类型保持一致,我们称之为外键

    用户和订单列表:

                用户表:  create  table user(
                                    id  int primary  key auto_increment,
                                    userName  varchar(20)
                            )
                订单列表
                                 create  table orders(
                                    id  int auto_increment,
                                    totlePrice double,
                                    user_id int,                                 
                            )
                  添加外键约束:在多表的一方添加约束
                   alter  table 多表名称  add foreign key (外键名称) reference 一表名称(主键)
                   alter table orders add foreight key(user_id)  reference  user(id)    
                   添加了外键之后又如下特点,主表中不能删除从表中已经引用的数据 ,从表中不能添加主表        中不存在的数据


    多对多关系:商品和订单
                         create  table orders(
                                    id  int auto_increment,
                                    totlePrice double,
                                    user_id int,                                 
                            )
                     create  table product(
                                    id  int auto_increment,
                                    pname varchar(20)
                                    Price double,                                                                    
                            )
            
                         create  table orderItem(            
                                    oid  int ,
                                    pid  int ,                                                                
                            )
            

    在开发中,我们一般引入中间表来表示他们的关系,在中间表中,存放2表的主键,然后一般还会将这个两个主键设置成中间表的联合主键,将多对多变为2个一对多,为了保证数据的一致性,在中间表上添加2个外键即可
    
alter table orderItem add foreign key(oid) reference orders(id)
alter table orderItem add foreign key(pid) refence product(id)



多表查询

笛卡尔迪: 多张表无条件的联合查询,没有任何意义
                    select A表.* ,B表  from  A表,B表;

内连接 : 
                格式1: 显示的内连接  select A表.* , B表.* from A[inner] join B on AB的链接条件
                格式2: 隐示的内连接  select A表.*, B表.* from A ,B  where ab的链接条件
     
外链接
            1 左外链接  select A表.*, B表.* from A表 left[outer] join B表 on 链接条件;
                先展示join左边的表的所有数据,根据条件关联查询join 右边的表(b),符合条件的展示出来
                不符合的null展示

            2 右外链接 select A表.*, B表.* from B表 right [outer] join A表  on 链接条件
                先展示join右边的数据,根据条件关联查询join左边的表的数据,符合条件的则展示,不符合        条件则以null显示
                

                
子查询

例如:
查询用户的订单,没有订单的用户不显示
  隐示的内连接: select user.*, order.* from user, orders where user.id=orders.user_id;
显示的内连接:select user.*, order.* from user join orders on  user.id=orders.use.id;

查询所有用户的订单详情
左外连接:   select user.*, order.* from user left join orders on  user.id=orders.use.id;
右外链接:  select user.*, orders.* form orders join user on  user.id=orders.use.id;


子查询

一个查询依赖与另一个查询    

  例如:查询用户为张三的详情     
 select *from orders where user_id = (select id from user where username = '张三');     

 查询出订单价格大于300的用户信息  in 对应多个信息     
  select * from user where  user_id in (select user_id from orders where totleprice > 300);         

    查询出订单价格大于300的订单信息及用户信息  as 给表起别名      

//内链接      select user.*,order.* from user,orders where user.id = order.user_id and order.price > 300;       
//子查询      select user.* , tamp.* from user, (select *from order where pice > 300) as tamp where user.id=tamp.user_id 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值