zoukankan      html  css  js  c++  java
  • 初级程序需要掌握的SQL(一)

    之前我也是,是一个看视频学习的小白,以前老是喜欢通宵看视频,一天10小时小时的学习量,一点效率都没有,就想写一个博客,来帮助大家回顾的SQL语句, 因为我也是初级,所以名字就叫初级程序员需要掌握的sql
    嘻嘻~ 如果大家觉得文章不错,就希望大家关注一下,麻烦了

    SQL 的基本操作

    基本操作:CURD,即增删改查。
    根据操作对象的不同,咱们可以将 SQL 的基本操作分为三类,分别为:库操作、表(字段)操作和数据操作。
    如果说整个Java体系非要用四个字来描述的话那就是增删改查工程师 甚至通俗点说就叫查询工程师

    	MySQL中查询占了80%
    

    我们先来回顾一下,那些年我们学习的基础SQL语句 ~ !

    库和表的删除与创建

    查看数据库

    show databases; 
    

    选择数据库

    use 数据库名;
    

    创建数据库

    CREATE DATABASE 数据库名;
    

    如果不存在,则创建数据库

    CREATE DATABASE if not exists 数据库名 default character set ='utf8';
    

    删除数据库

    DROP DATABASE 数据库名;
    

    创建表

    create table 表名(
        列名1 类型(长度) [约束],
        列名2 类型(长度) [约束],
        ……
    );
    

    删除表

    DROP TABLE 表名;
    

    表约束

    1.非空约束    NOT NULL
    2.默认值约束  DEFAULT '男'
    3.唯一约束    UNIQUE
    4.主键约束    PRIMARY KEY
    

    查看表结构

    DESC 表名
    

    修改表

    修改列名

    Alter table 表名  change  列名  新列名 类型;
    

    修改列类型

    Alter table 表名  change 列名  列名  新类型;
    

    修改列类型

    Alter table 表名  change 列名  列名  新类型;
    

    修改列类型

    Alter table 表名  modify  列名  新类型;
    

    				单表查询操作
    

    查询表中全部内容

    select * from 表名;
    

    查询表中指定列的信息 (推荐)

    select1,2 from 表名;
    

    数据去重

    select distinct1,2 From 表名;
    

    拼接结果

    select concat(1,2) from 表名;
    

    运算符优先级:
    1.乘法和除法的优先级高于加法和减法
    2.同级运算的顺序是从左到右
    3.表达式中使用"括号"可强行改变优先级的运算顺序

    select1[+-*/]2 from 表名;
    

    设置别名(注意:关键字as可以省略)

    selectas 别名 from 表名;   
    select 列 别名 from 表名;      
    

    条件查询

    select 列… from 表名 where 条件;  
    

    查看数据库

    show databases; 
    

    使用数据库

    use 数据库名;
    

    创建数据库

    CREATE DATABASE 数据库名;
    

    删除数据库

    DROP DATABASE 数据库名;
    

    创建表

        create table 表名(
            列名1 类型(长度) [约束],
            列名2 类型(长度) [约束],
            ……
        );
    

    长度区别

    int类型带长度:不影响存取值,即使设定的值超出了长度的范畴,也能存,如果没有达到设定的长度,则使用空格自动填充到设定的长度
    char类型:不可变字符,设定的长度就是规定当前字段能存的数据的最大长度,若超出长度,则会报错,若没有达到长度,使用空格填充到设定的长度
    varchar:可变字符,设定的长度同样是规定当前字段能存的数据的最大长度,若超出长度,则会报错,若没有达到长度,不会使用空格填充,实际多长就是多长

    删除表

    DROP TABLE 表名;
    

    表约束

    1.非空约束    NOT NULL
    2.默认值约束  DEFAULT '男'
    3.唯一约束    UNIQUE
    4.主键约束    PRIMARY KEY
    

    查看表结构

    DESC 表名
    

    修改表
    修改列名

    Alter table 表名  change  列名  新列名 类型;
    

    修改列类型

    Alter table 表名  change 列名  列名  新类型;
    

    修改列类型

    Alter table 表名  modify  列名  新类型;
    

    数据查询-单表

    查询表中全部信息

    select * from 表名;
    

    查询表中指定列的信息

    select1,2 from 表名;
    

    语句的执行顺序:from—>select

    数据去重

    select distinct 列…. From 表名;
    

    拼接结果

    select concat(1,2) from 表名;
    

    运算符优先级:
    1.乘法和除法的优先级高于加法和减法
    2.同级运算的顺序是从左到右
    3.表达式中使用"括号"可强行改变优先级的运算顺序

    select1[+-*/]2 from 表名;
    

    设置别名(注意:关键字as可以省略)

        selectas 别名 from 表名;   
        select 列 别名 from 表名;      
    

    语句的执行顺序:from—>select

    条件查询

    select 列… from 表名 where 条件;  
    

    条件中比较运算符:( 等于:= 大于:> 大于等于:>= 小于:< 小于等于:<= 不等于:!= 或 <> )

    where 列  比较运算符  值;
    

    注: 注意:字符串、日期需使用单引号括起来

    逻辑运算符( 并且:and 或 && 或:or 非:not 或 ! )

    where 条件1  逻辑运算符  条件2;  
    where not 条件; 
    

    范围查询

    wherebetween 条件1  and 条件2;          //列在这个区间的值
    wherenot between 条件1 and 条件2;    //不在这个区间
    where !(between 条件1 and 条件2 );     //同样表示不在这个区间
    

    集合查询( 判断列的值是否在指定的集合中 )

    wherein(1,2);          //列中的数据是in后的值里面的
    wherenot in(1,2);   //不是in中指定值的数据
    

    NULL值查询( 注意:列中值为null不能使用=去查询 )

    whereis null;  //查询列中值为null的数据
    

    模糊查询
    %:表示0到多个字符,示例

    wherelike '%0';   //表示以0结尾
    wherelike  '0%';   //表示以0开头
    wherelike  '%0%';   //表示数据中包含0
    

    _:表示一个字符,可多次使用,示例:

    wherelike '%0_';   //数据结尾第二位是0
    

    结果排序( 对查询出的结果按照一列或多列进行升序还是降序排列 升序:asc 降序:desc 注意:不能使用中文的别名排序)

    where 条件 order by[asc/desc]
    

    语句的执行顺序:from—>where—>select—>order by

    分页查询( beginIndex:表示从第多少条数据开始 pageSize:表示每页显示的数据条数 )

    where [条件] limit beginIndex,pageSize;
    

    ex:每页显示3条数据
    第一页: SELECT * FROM 表名 LIMIT 0,3 --0,1,2 从0开始,数三条
    第二页: SELECT * FROM 表名 LIMIT 3,3 --3,4,5 从三开始,数三条
    第三页: SELECT * FROM 表名 LIMIT 6,3 --6,7,8 从六开始,数三条
    第四页: SELECT * FROM 表名 LIMIT 9,3 --9,10,11 从九开始,数三条
    第七页: SELECT * FROM 表名 LIMIT 18,3 --18,19,20 从十八开始,数、三条

    beginIndex公式:(当前页数-1)pageSize

    聚集函数( 作用于一组数据,并对一组数据返回一个值 )

    COUNT:统计结果记录数,若统计的是列,列中为Null,那么count将不会计算值
    MAX:  统计计算最大值
    MIN:  统计计算最小值
    SUM:  统计计算求和
    AVG:  统计计算平均值
    

    分组函数( 注意:如果要对分组后的数据进行筛选,那么必须使用having关键字,条件写在having后 )

    select 聚集函数 from 表名 where [条件] group byhaving 分组后的条件
    

    Where和having的区别:
    Where: 先过滤已有的数据(数据是已经存在的),在进行分组,在聚集计算
    Having:先分组,在对每组进行计算,根据得到结果在过滤(分组把数据算出之后,在过滤)
    注意:使用having的时候,它是可以使用别名的

    数据查询-多表

    多表是一个比较重要的概念,大家能理解的话,已经步入初级程序员了

    交叉连接:又名笛卡尔积,使用交叉连接会产生笛卡尔积
    假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

    select *  from1,2
    

    内连接:过滤为空的数据(查询的实际上是两张表数据的交集部分) 目的 ==》解决笛卡尔积现象.

    select * from1,2  where1.字段=2.字段;  //隐式内连接,使用where条件消除笛卡尔积
    select * from1 [inner] join2 on1.字段=2.字段;  //显式内连接,如果是多张表,则一直在join..on后依次添加join..on即可,inner关键字可被省略
    

    外连接:左外连接、右外连接、全外连接
    左外连接:以左边表为主,返回左边表中所有数据,若右表中无数据,则显示为NULL,请参考实际查询结果来理解

    select * from1 left [outer] join2 on1.字段=2.字段;   //表1为左表,表2为右表,outer关键字可被省略
    

    右外连接:以右边表为主,返回右表中所有数据,若左表中无数据,则显示为NULL,结合实际查询结果来理解

    select * from1 right [outer] join2 on1.字段=2.字段;  //表1为左表,表2为右表,outer关键字可被省略
    

    全外连接:返回涉及的多表中的所有数据,MYSQL中不支持该查询,仅限了解自连接:单表当作多表查询,直白的讲就是一张表中数据含有多种关系,使用多表查询的语法,来查询一张表,
    查询过程中一定要使用别名,多用在分类数据、省市县分类数据、权限…

    select1.字段1,2.字段2 from 表名 as1,表名 as2 where1.字段1=2.字段2
    

    子查询:将一个查询结果作为另一个查询的对象,直白的讲就是SQL语句嵌套

    select * from (select * from 表名) as 别名
    select * from where 条件->条件中包含查询语句
    

    子查询:将一个查询结果作为另一个查询的对象,直白的讲就是SQL语句嵌套

    select * from (select * from 表名) as 别名
    select * from where 条件->条件中包含查询语句
    

    注意:1.查询结果的虚拟表必须取别名
    2.字段与关键字一样,冲突时,需要给字段名加``,(Esc键下面、1的左边)
    3.如果给虚拟结果表中的字段取了别名,则对虚拟结果表查询时,应该用 表别名.虚拟表字段别名

    插入数据语法

    注意: 1.如果插入的表中的主键是自增类型的,可以不用插入值
    2.如果主键是非自增 ,插入的数据则是填补主键字段值空余的值
    3.如果主键设置了自动递增,会从主键字段最大值开始插入数据

    插入一条数据

    insert into 表名(字段1,字段2..) values(1,2);    
    

    其余插入方式

    insert into 表名(字段1,字段2) values(1,2),(1,2);     //插入多条数据【MYSQL】
    insert into 表名 values(1,2);                    //针对全表所有字段进行插入操作
    insert into 表名(字段) select 字段 from2;         //查询结果插入
    insert into 表名 select 字段 from2;               //查询结果,全表插入
    

    修改数据语法

    updateset 字段=where 条件;  //带条件修改指定数据,否则修改全表
    

    删除数据语法

    delete fromwhere 条件;  //删除数据带条件指定数据,否则删除全表数据
    

    数据备份

    mysqldump -u账户 -p密码 数据库名称>脚本文件存储地
    

    ex: mysqldump -uroot -proot mybatis> D:/mail.sql
    导入:

    mysql -u账户 -p密码 数据库名称< 脚本文件存储地址
    

    数据索引

    索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

    什么列适合建索引??
    1.表的主键、外键必须有索引;
    2.数据量超过30000的表应该有索引;
    3.经常与其他表进行连接的表,在连接字段上应该建立索引;
    4.经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
    5.索引应该建在选择性高的字段上;
    6.索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;

    sql语句创建和删除索引:
    创建索引:

    CREATE INDEX 索引名称 ON 表名 (列名)
    

    删除索引:
    方式一:

    DROP INDEX 索引名 ON 表名 
    

    方式二:

    ALTER TABLE 表名 DROP INDEX 索引名
    
  • 相关阅读:
    基于 BP 神经网络的识别手写体数字
    【science封面文章】Human-level concept learning through probabilistic program induction
    漫谈小样本的类人概念学习与大数据的深度强化学习
    Setting up a Deep Learning Machine from Scratch (Software)
    Building Apache Thrift on CentOS 6.5¶
    ---Ubuntu 14.04下配置caffe---
    markdown基本语法说明
    Andrew ng清华报告听后感
    Median of Two Sorted Arrays
    LeetCode Question Difficulty Distribution
  • 原文地址:https://www.cnblogs.com/spiritmark/p/13010166.html
Copyright © 2011-2022 走看看