Hello World

MySQL基本语句

1.基础语句

1.数据库操作

  • 数据库连接  mysql -u用户名 -p密码 -h主机名称  -h主机名称如果实在本机则可以省略
  • 执行sql命令时,分号不能省略。
  • 查看数据库(所有的) show databases;
  • 查看指定数据库 show create database db_name;
  • 创建数据库 create database db_name;
  • 修改数据库编码 alter database db_name default character set utf8;
  • 使用数据库 use db_name;
  • 删除数据库 drop database db_name;(不能一次删除多个!)

2.数据表操作

  • 查看所有表 show tables ;
  • 查看某个表的创建语句  show create table 表名;
  • 查看某个表信息  desc 表名;
  • 创建表 create table 表名(列名 数据类型 [not null] [primary key],列名 数据类型 [not null],..) ;
  • 删除表记录   delete from 表名; delete * from 表名;
  • 删除表 drop table 表名;(删除整个表结构和表记录)
  • 更改表名 rename table 旧表名 to 新表名;
  • 增加一个列 Alter table 表名 add column 列名 数据类型;(column 关键字可省略)
  • 删除一个列 Alter table 表名 drop column 列名; (column 关键字可省略)
  • 修改一个列 Alter table 表名 change column 列名 新列名 数据类型;(可修改 列名 数据类型)
  • 修改一个列     Alter table 表名 modify column 列名 数据类型;(可修改 数据类型)

3.数据记录操作

  • 查看表的所有记录   select * from 表名 *代表所有列 也可以select 列名列名 from 表名;
  • 增加表内容 插入数据 insert into 表名(列名,列名...)values(值,值...);
  • 修改列中的一条记录 update 表名 set 列=值 where 列=值;
  • 删除列中的一条记录 delete from 表名 where 列=值;

2.高级查询语句

1.like

  LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
  select  字段名,字段名 from 表名 where 字段名 like  pattern
  like 匹配/模糊匹配,会与 % 和 _ 结合使用。
  • '%a'   以a结尾的数据
  • 'a%'   以a开头的数据
  • '%a%'   含有a的数据
  • 'a'   三位且中间字母是a的
  • '_a'   两位且结尾字母是a的
  • 'a_'   两位且开头字母是a的

2. top

  TOP 子句用于规定要返回的记录的数目。
 select  top 2 * from 表名;
  TOP 子句用于规定要返回的记录的百分比。
 select  top 50 percent * from 表名;

3. order by

    用于根据指定的列对结果集进行排序。
  select * from 表名 order by 字段名 desc/asc;  
  asc   升序;
  desc    降序;
  结果集默认以升序排序;

4. group by

  GROUP BY 语句根据一个或多个列对结果集进行分组。
  在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
 select  name, count(*)  from table_name  group  by  name;  
  查询时对分组后的数据添加约束条件
 select  name, count(1)  from  table_name  group  by  name  having   count(1) > 3;

5. in

  IN 操作符允许我们在 WHERE 子句中规定多个值.
 select * from 表名 where 字段名 in (value1,value2,value3);

6. between

  会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
 select name, count(*) from 表名 where 字段名 between  value1  and  value2;

7. union

  UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
  请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
 select * from 表1 union select * from 表2;
  默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
 select * from 表1 union all select * from 表2;
  另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

8. case when

case when 用法

3.多表联合查询

  将两张表的列组合在一起产生新的结果集。

create table student (id int, name varchar(20), code int);
insert into student(name,code) values('张三', 1),('李四',2),('王五',3);

create table exam (code int, subject varchar(120), score int);
insert into exam(code,subject,score) values(1,'语文',85),(1,'数学',88),(1,'英语',66),(2,'语文',72),(2,'数学',64),(2,'英语',88),(3,'语文',89),(3,'数学',96),(3,'英语',98);

1. inner join(内连接)

  在表中存在至少一个匹配时,INNER JOIN 关键字返回行。
  先在表一中查询出一套记录,再根据后面的条件筛选从表一查询的记录。
  select  table1.field1,table2.field1  from table1 inner join table2 on table1.field= table2.field;
  此处的 inner 可省略;

2. left join(左外连接)

  将左表中所有的基础查询出来,再将右表中符合条件的记录查询出来,不符合条件的记录显示为NULL;
  先从左表查询出一套记录,再根据条件去匹配右表,如果匹配不到,则结果集中右表对应的字段显示为NULL
  select  table1.field1,table2.field1  from table1 left join table2 on table1.field= table2.field;

  先从左表查询出一套记录,再根据条件去匹配右表,通过 where 子句 进行过滤筛选,此时一般根据右表的字段进行筛选;
  select  table1.field1,table2.field1  from table1 left join table2 on table1.field= table2.field where table2.field 条件;

3. right join(右外连接)

  将右表中所有的基础查询出来,再将左表中符合条件的记录查询出来,不符合条件的记录显示为NULL;

  先从右表查询出一套记录,再根据条件去匹配左表,如果匹配不到,则结果集中左表对应的字段显示为NULL
  select  table1.field1,table2.field1  from table1 right join table2 on table1.field= table2.field;

  先从左表查询出一套记录,再根据条件去匹配右表,通过 where 子句 进行过滤筛选,此时一般根据左表的字段进行筛选;
  select  table1.field1,table2.field1  from table1 left join table2 on table1.field= table2.field where table1.field 条件;

4. union(联合查询)

  UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
  请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
  select * from table1 union select * from table2;
  查询的结果自动去重
  select * from table1 union all select * from table2;
  不去重

5. full join (全外连接)

  mysql本身不支持全外连接,用左右连接可实现全连接效果
  通过 union 合并左外连接和右外连接
  select  table1.field1,table2.field1  from table1 left join table2 on table1.field= table2.field
  union all
  select  table1.field1,table2.field1  from table1 right join table2 on table1.field= table2.field;

6. cross join(交叉连接)

  得到两个表的乘积。即笛卡尔积。
  select * from table1 cross join tablle2;
  用 table1的每一条记录去匹配 table2 的所有记录;
  若 table1有4条记录,table2 有5条记录,则结果就有4x5=20 条记录;

  

posted @ 2018-09-17 17:21  小小忧愁米粒大  阅读(207)  评论(0编辑  收藏  举报
瞅啥瞅,好好看书