Mysql基础语法介绍与使用

打印 上一主题 下一主题

主题 815|帖子 815|积分 2445


常用的数据类型:

int整型,float浮点型,字符型varchar(n),日期(Date,Datetime)
分类:



  • DDL:数据界说语言,重要是操纵数据库,数据表,字段的(CURD).
    关键字:create,drop,alter,show
  • DML:数据操纵语言,操纵表数据增删改(更新语句).
    关键字:insert,delete,update
  • DQL:数据查询语言,操纵表数据的查询.
    关键字:select,from,where
实际展示

DDL:

操纵数据库-CURD



  • 增:create database[if not exists]数据库名[charset’码表名’];
  1. # 采用指定码表.
  2. create database day01 character set 'utf8';
  3. create database day02 charset 'utf8';
  4. create database day03 charset 'gbk';
复制代码


  • 删:drop database 数据库名;
  1. # 删除数据库.
  2. 格式: drop database 数据库名;
  3. drop database day03;
复制代码


  • 改:alter database 数据库名 charset’码表名’;
  1. # 修改数据库(的码表)
  2. alter database day03 charset 'utf8';
复制代码


  • 查:show databases; 检察本机所有数据库
    show create database 数据库名; 检察当前数据库的码表
    Select database();函数 检察当前使用哪个数据库
  1. # 查看当前数据库的码表.
  2. show databases ;
  3. show create database day03;
  4. select database();
复制代码
操纵数据表-CURD



  • 增:create table[if not exists]数据表名(
    列名 数据类型 [束缚]
    列名 数据类型 [束缚]
    …);
  1. # 创建用户表(users), 字段为: id(int), username(varchar(20)), password(varchar(20)), nickname(字符串, 10)
  2. create table if not exists users(
  3.     id int not null,        # id列, int类型, 非空约束
  4.     username varchar(20),   # 账号
  5.     password varchar(20),   # 密码
  6.     nickname varchar(10)    # 昵称
  7. );
复制代码


  • 删:drop table数据表名;
  1. # 删除数据表.
  2. drop table users_30;
复制代码


  • 改:alter table 旧表名 rename新表名;
    Rename table旧表名 to新表名;
  1. # 修改数据表(的表名).
  2. # 格式1: alter table 旧表名 rename 新表名;
  3. alter table users rename my_users;
  4. # 格式2: rename table 旧表名 to 新表名;
  5. rename table my_users to users_30;
复制代码


  • 查:show tables; 检察当前数据库所有数据表
    Desc数据表名; 检察指定数据表的布局,即列名,数据类型,束缚等.
    Show create table 数据表名;检察数据表的详细信息.
  1. # 查看当前数据库的码表.
  2. show databases ;
  3. show create database day03;
  4. select database();
复制代码
操纵字段



  • 增:alter table数据表名 add 新列名 数据类型[束缚];
  1. # 给表新增字段, 例如: address表示地址.
  2. # 格式: alter table 表名 add 新列名 数据类型 [约束];
  3. alter table users add address varchar(10) not null;
复制代码


  • 删:alter table 数据表名drop 列名; 删除表的某列
    删除表的全部数据:delete * from表名;
  1. #  删除指定的列.
  2. # 格式: alter table 表名 drop 旧列名;
  3. alter table users drop `desc`;
复制代码


  • 改:alter table 数据表名 modify 旧列名 数据类型 [束缚];
    alter table数据表名 change 旧列名 新列名 数据类型[束缚];
  1. # 格式: alter table 表名 modify 旧列名 数据类型 [约束];
  2. alter table users modify address int;
  3. # 格式: alter table 表名 change 旧列名 新列名 数据类型 [约束];
  4. alter table users change address `desc` varchar(50) not null;
复制代码


  • 查:desc 数据表名;
  1. desc users;
复制代码
DML:

操纵表数据-增删改



  • 增: 单条:insert into 表名(列1,列2…)values(值1,值2…)
    Insert into 表名values(值1,值2…) 不写列名,默认是全列名.
    多条:insert into 表名values(值1,值2…),(值1,值2…)
    Insert into 表名values(null,值1,值2…),(null,值1,值2…);
    注:需联合主键列+自增一起使用.
  1. /*# 1: 添加单条数据, 全列名写法.
  2.       insert into 数据表名(列名1, 列名2, 列名3...) values(值1, 值2, 值3...);
  3.       insert into 数据表名 values(值1, 值2, 值3...);   
  4. # 2: 添加单条数据, 给指定列添加数据.
  5.         insert into 数据表名(列名1, 列名2, 列名3...) values(值1, 值2, 值3...);
  6. # 3: 同时添加多条数据.
  7.         insert into 数据表名(列名1, 列名2, 列名3...) values(值1, 值2, 值3...), (值1, 值2, 值3...), (值1, 值2, 值3...)...;*/
复制代码


  • 删:delete from数据表名 where条件; 不写where条件删除所有数据.
  1. # 删除表数据.
  2. # 格式: delete from 表名 where 条件;
  3. delete from student where id = 2;
  4. delete from student;       # 危险, 会一次性删除所有的数据,记得加where条件
复制代码


  • 改:update 数据表名 set 列名=列值,列名=列值… where条件;
  1. # 修改表数据.
  2. # 格式: update 表名 set 列名=值, 列名=值... where 条件;
  3. # id: 3 => 张三, 25, 男
  4. update student set name='张三', age=25, gender='男' where id=3;
复制代码
DQL

单表查询完整语法

  1. /*完整的单表查询语法格式如下:
  2.         select
  3.             [distinct] 列名1, 列名2 as 别名, 列名3...
  4.         from
  5.             数据表名
  6.         where
  7.             组前筛选
  8.         group by
  9.             分组字段1, 分组字段2...
  10.         having
  11.             组后筛选
  12.         order by
  13.             排序的列1, 列2 [asc | desc]
  14.         limit
  15.             起始索引, 数据条数;*/
复制代码
简单查询



  • 检察所有数据:selelct*from表名;
  1. select * from product;  
复制代码


  • 检察值1,值2 :select值1,值2from 表名;
  1. # 查询商品名 和 商品价格.
  2. select pname, price from product;
复制代码


  • 起别名查询 : select 值1 as名称,值2 as名称 from表名;
  1. select pname as 商品名称, price as 商品价格 from product;
  2. select pname 商品名称, price 商品价格 from product;       # as可以省略不写.
复制代码


  • 查询结果+ 10: select 值1 + 10 as名称 from 表名;
  1. select *, price + 10 as new_price from product;
复制代码


  • 去重查询:select distinct 列名 from 表名;
  1. select distinct category_id from product;           # 按照 商品所属的分类ID(category_id)去重.
  2. select distinct category_id, price + 10 from product;    # 按照 商品所属的分类ID(category_id) + 价格 去重.
复制代码
条件查询



  • Where条件: 比较运算:>,>=,<,<=,=,(!=,<>)不即是
  1. # 查询价格为800商品
  2. select * from product where price = 800;
复制代码


  • 范围筛选:in(值1,值2…);
    Not in(值1,值2…);
  1. # 查询价格为800商品
  2. select * from product where price in (800);
  3. # 查询价格不是800的所有商品
  4. select * from product where price not in (800);
复制代码


  • Between 值1 and 值2; 包左包右
  1. # 查询商品价格在200到800之间所有商品
  2. select * from product where price between 200 and 800; # 包左包右.
复制代码


  • 含糊查询:like ‘_值’; _代表1个字符
    Like’%值’; %代表恣意多个字符
  1. # 查询以'香'开头的所有商品
  2. select * from product where pname like '香_';    # _代表任意的1个字符
  3. select * from product where pname like '香__';   # _代表任意的1个字符, 这里有2个_
  4. select * from product where pname like '香%';    # %代表任意的多个字符, 至少0个, 至多无所谓.
复制代码


  • 非空查询:is null; 是否为空
    Is not null; 是否不为空
  1. # 查询没有分类的商品
  2. # 细节: 空表示什么都没有, 所以无法直接通过 = 来判断.
  3. select * from product where category_id is null;    # is null 和 is not null 才是判断空的格式.
  4. # 查询有分类的商品
  5. select * from product where category_id is not null;
复制代码


  • 逻辑运算查询:
    and 逻辑与, 表而且, 要求条件都要满足, 有False则整体为False.
    or 逻辑或, 表或者, 只要满足恣意1个条件即可, 有True则整体为True.
    not 逻辑非, 表取反, True => False, False => True
  • 排序查询:select * from表名order by 要排序的列;asc 默认升序,desc降
  • 聚合查询
    max() 某列的 最大值
    min() 某列的 最小值
    sum() 某列的 和
    avg() 某列的 平均值
    count() 统计表的数据总条数, 或者某列的非空值的个数.
  1. select
  2.     max(price) as max_price,
  3.     min(price) as 最低价格,         # 起别名的时候,as和单引号都可以不写.
  4.     sum(price) 价格总和,
  5.     avg(price) 均价,
  6.     count(price) 数据总条数
  7. from product;
复制代码


  • 分组查询介绍:
    分组查询 = 按照分组字段, 把整表数据 分成n个组, 然后在各个组内做 聚合操纵等.
    格式:
    select 分组字段, 聚合函数 from 数据表名 where 组前筛选 group by 分组的列 having 组后筛选;
  1. # 统计各个分类商品的个数, 且只显示个数大于1的信息.
  2. select
  3.     category_id, count(pid) total_cnt
  4. from
  5.     product
  6. group by
  7.     category_id
  8. having
  9.     total_cnt > 1;      # 组后筛选
复制代码


  • 分页查询
    就是一次性的从数据表中, 获取指定条数的数据
    格式:limit 起始索引, 数据条数;
  1. # 3条/页, 获取指定页.
  2. select * from product limit 0, 3;   # 第 1 页
  3. select * from product limit 3, 3;   # 第 2 页
  4. select * from product limit 6, 3;   # 第 3 页
复制代码
多表查询



  • 交叉查询:select * from A,B;
  1. # 两张表的笛卡尔积, 即: 表A的总数 * 表B的总数
  2. select * from hero, kongfu;
复制代码


  • 连接查询
  • 内连接:表现连接:select from A join B 关联条件 where;
    隐式连接:select
    from A,B where;
  1. # 显示
  2. select * from hero h inner join kongfu kf on h.kongfu_id = kf.kid;
  3. select * from hero h join kongfu kf on h.kongfu_id = kf.kid; # inner可省略
  4. # 隐式
  5. select * from hero h, kongfu kf where h.kongfu_id = kf.kid;
复制代码


  • 左连接:select* from A left join B on 关联条件 where;
  1. # 查询结果 = 左表的全集 + 表的交集.
  2. select * from hero h left outer join kongfu kf on h.kongfu_id = kf.kid;
  3. select * from hero h left join kongfu kf on h.kongfu_id = kf.kid;     # outer可以省略不写.
复制代码
右连接:select * from Aright join B on 关联条件 where ;
  1. # 查询结果 = 右表的全集 + 表的交集.
  2. select * from hero h right outer join kongfu kf on h.kongfu_id = kf.kid;
  3. select * from hero h right join kongfu kf on h.kongfu_id = kf.kid;     # outer可以省略不写.
复制代码


  • 子查询
    格式:
    主查询 | 父查询 子查询
    select * from 表名 where 列名 in (select 列名 from 表名…);
  1. 合并版, 子查询写法.
  2. select * from hero where kongfu_id in (select kid from kongfu where kname = '降龙十八掌');
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

水军大提督

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表