Mysql学习笔记_1,相比hive和mysql查询汇总

作者: 数据库信息  发布:2019-07-07

Linux作为操作系统,Apache 或Nginx作为 Web 服务器,MySQL 作为数据库,PHP/Perl/Python作为服务器端脚本解释器。这四个软件都是免费或开源软件软件,因此使用这种方式除开人工成本就可以建立起一个稳定、免费的网站系统,称为“LAMP“或“LNMP”组合。

由于底层的处理机制大不相同,hive和mysql在查询上还是有较大差异的!

一、以cmd命令使用mysql的基础步骤 (DOS系统下清屏的命令:cls)

 

基础步骤:

  1. 单个表的select操作

(1)mysql -u root -p回车    //进入数据库

最简单的查询

(2)password ........           //输入密码

图片 1

(3)show databases;       //查看数据库

  • .带in关键字查询:select 字段1,字段2 frome 表名 where 字段 [not]in(元素1,元素2);

(4)T   路径........文件名.sql;  //连接文本记录,使用该文件存储操作信息

例:select * from t_student where age in (21,23);

(5)use 库名 ;  //选数据库

select * from t_student where age not in (21,23);

(6)create tables //建表

between and的范围查询:select 字段1,字段2 frome 表名 where 字段 [not]between 取值1 and 取值2;

 

例:select * frome t_student where age between 21 and 29;

二、mysql操作命令

select * frome t_student where age not between 21 and 29;

1.连接

like的模糊查询:select 字段1,字段2... frome 表名 where 字段 [not] like '字符串';

  本地连接: mysql -u root -p

"%"代表任意字符;

  明文连接: mysql -u root -p密码

"_"代表单个字符;

  远程连接: mysql -h  ip地址 -u 账号 -p 

空值查询:select 字段1,字段2...frome 表名 where 字段 is[not] null;

**2.库的**操作**命令**

 

**  (1)**查看所有数据库:                show  databases;**

  •  

**  (2)创建数据库:                   create database 库名;**

and多条件查询:

**  (3)删除数据库:                     drop database 库名;**

select 字段1,字段2...frome 表名 where 条件表达式1 and 条件表达式2 [and 条件表达式n]

**  (4)查看当前使用的数据库:                select  database();**

例:select * frome t_student where gradeName='一年级' and age=23;

**    (5)查看建库语句          show create database 数据库名;** **

or的多条件查询

***  (6)*查看当前数据库存在的数据表        ***show tables; *

select 字段1,字段2...frome 表名 where 条件表达式1 or 条件表达式2 [or 条件表达式n]

**注意:**MySQL数据库中命令不区分大小写。在Windows下,数据库名称也是不区分大小写的,但在Linux下,数据库名称严格区分大小写。**

例:select * frome t_student where gradeName='一年级' or age=23;//或者,条件只要满足一个

 

distinct去重复查询:select distinct 字段名 from 表名

3.表的操作命令**  **

Orderby 和sortby 的区别(前者是要mapreduce操作后者在本机上排序)

  1.创建数据表
        
      create table [if not exists] 表名(
              字段名1  字段类型,
              字段名2  字段类型,
              字段名3  字段类型
              )engine=innodb default charset=utf8;

 

  **(1)[if not exists]如果该表不存在则创建**

  1. 分组查询 group by 属性名 [having 条件表达式][with rollup]

  (2)engine  =  innodb 设置表引擎

常用函数:count group_concat rollup

  (3)default  charset=utf8 设置表的字符集

1.select gradeName,count(stuName) from t_student group by gradeName;

  **(4)每个建表语句的字段必须用逗号分隔,最后一句逗号不能有**

2.select gradeName,count(stuName) from t_student group by gradeName having count(stuName)>3;

 

3.select gradeName,group_concat(stuName) from t_student group by gradeName with rollup;

  **2.查看建表语句      show create table '表名';**

 

  **3.**查看表结构     **desc 表名   或   desc 表名/G(竖表);**

  1. 子查询

  4.删除表      drop  table  表名;

图片 2

 

0.一般嵌套子查询

附:常用约束:

1.带比较运算符的子查询(子查询可以使用比较运算符)

1)主键约束:primary key --非空且唯一,一张表就定义一个主键

select * from t_book where price>=(select price from t_priceLevel where priceLevel=1);

2)主键自增长:auto_increment

  1. in关键字的子查询(一个查询语句的条件可能落在另一个select语句的查询结果中)

3)非空:not  null --不允许插入null值,可定义多个非空约束

select * from t_book where bookType in(select id from t_bookType);

4)唯一性:unique  --不允许重复,但可以为空,可定义多个唯一约束(例如:账户名)

select * from t_book where bookType not in(select id from t_bookType);

5)默认值:default  默认值  --指定缺省值,在没有添加值得情况下使用default后指定的默认值

3.带exists关键字的子查询(加入子查询查询到记录,则进行外层查询,否则,不执行外层查询)

6)零填充:zerofill 并不是限制插入的长度,仅是显示时的位数使用0

select * from t_book where exists(select * from t_booktype);

7)无符号: unsiged

select * from t_book where not exists(select * from t_booktype);

8)默认值:default (例:default('2'))如果没有插入数据,则取默认值

4.带any关键字的子查询(any关键字表示满足其中任一条件)

9)注释内容: comment 建表语句中的注释

select * from t_book where price>= any(select price from t_priceLevel);

10)外键:foreign key(列名)     references 外键表名(外键列名); 

5.带all关键字的子查询(all关键字表示满足所有条件)

注意:有外键时,创建表,先创建父表,再创建子表;插入数据,先插入父表,再插入子表;删除数据,先删除子表中的数据,再删除父表中的数据。

select * from t_book where price>= all(select price from t_priceLevel);

 

2,3,4,5 目前仅mysql支持

 

Hive中有基于partition的查询,从效率上讲是一个剪枝的过程

4.增删改查(数据操作)

 

(1)增(添加数据)

  1. 多表连接查询

**            ① insert into 表名 (字段1,字段2……) values (值1,值2……);   //建议使用 

Mysql中支持内连接,左右外连接(注意外连接的工作原理,没有匹配项返回null,可用where过滤),级联多表连接的时候,从中间解读;

            ② insert into 表名 values (值1,值2……),(值1,值2……);      //一次性插入多条数据

与此对应hive中有内连接join,外连接(left/right outer join)加上full outer join(全表关联),semi join是用来在hive中解决in exists子查询的问题。

            ③ insert into 表名 (字段1,字段2……) values (值1,值2……),(值1,值2……);      //一次性插入多条数据

图片 3

            ④ insert into 表名 values (值1,值2...);

Hive的join可大致划分为common join 和map join ,两者的区别在于后者应用于大小表数据倾斜的情况具体参考

            ⑤ insert into 表名 set 字段1=值1,字段2=值2...;

图片 4

              注意:
                1.值和字段名要一一对应,否则会报错
                2.写入的值一定要和数据类型相匹配**

Map完输出为相同key的list,然而按照hash分发到不同reduce的task中。

**(2)删 (**删除数据**)**

图片 5

             delete from 表名 where  条件;**

 

             truncate 表名;

  1. 合并查询

            
        注意:删除数据的时候,一定要加上where条件,否则会删除所有的数据

1.union

 

使用union关键字是,数据库系统会将所有的查询结果合并到一起,然后去掉相同的记录;

1.删除表中的某一列。

select id from t_book union select id from t_bookType;

 

2.union all

mysql>alter table 表名 drop <column> 列名; //column可省略

使用union all,不会去除掉重复的记录;

附:drop、truncate、delete的区别?

select id from t_book union all select id from t_bookType;

  a) drop和truncate是DDL,而delete是DML。

  补充:hive 性能优化方向

  b) truncate和delete只删除数据,不会删除表的结构,而drop会把数据和表结构都删除。

     列剪裁 分区剪裁  需要设定相关参数

  c) delete可以带where有条件的删除,可以回滚(rollback),但删除速度较truncate较慢。而truncate则不可以删除特定的数据,也不可以回滚(rollback),但删除速度比delete快。

     join 小表依次放在前面 ,左边的在reduce阶段要放进内存,减少内存发生溢出的几率

 

    map join 用于小表和大表的倾斜情况

建议:小心使用drop和truncate,尤其在数据没有备份的情况下。

 

 

 

(3)改(修改数据)

 

**             update 表名 set 要修改的字段=新的字段...... where  条件

 

        注意:修改数据的时候,一定要加上where条件,否则会修改所有的数据**

 

 

1、修改表中的某一列。

 

a)修改表中某一列的列名(同时可修改列的数据类型)

mysql>alter table 表名 change 原列名 新列名 列数据类型;

 

b)修改表中某一列的数据类型

mysql>alter table 表名 modify 列名 列新的数据类型;

 

 2.向表中添加新的列

mysql>alter table 表名 add <column> 列名 列的数据类型 [<列的完整性约束>];//column可省略

 

3、删除表中的某一列。

mysql>alter table 表名 drop <column> 列名;  //column可省略

 

4.修改表的编码字符集。  alter table 表名 character set 字符集;

5.修改表的名称      alter table 原表名 rename to 新表名; 或   rename table 原表名 to 新表名;

 

             

 

(4)查(查找数据)

            **select * from 表名 where 字段名=字段值;* * **

*              ***select 字段1,字段2... from 表名 where 字段名=字段值;*** ***

***            * select *(所有字段) from 表;**

**             select 字段1,字段2.. from 表;**

 

1. 过滤表中重复的数据(关键字distinct)

select distinct 列名 from 表名;   //返回该字段下的所有字段值,若有相同字段值,则只返回一个。    

2、排序(关键字order by)

mysql>select * from 表名 order by 列名 asc;       //升序(默认),asc可省略不写。
mysql>select * from 表名 order by 列名 desc;     //降序

例:按照学生表(student)中学生成绩(grade)的由高到低顺序输出学生的学号(sno)、姓名(sname)和成绩(grade).

mysql>select sno,sname,grade from student order by grade desc;

3、分页查询(关键字limit)。

mysql>select * from 表名 limit (pageNo-1)*pagesize,pagesize; //    pageNo-->要查询的页数,pageSize-->每页显示的记录数

例:查询dept表中第一页(每页2条数据)的记录。

mysql>select * from 表名 limit 0,2; 

 

4、模糊查询(关键字like)。

mysql>select * from 表名 where 列名 like ' % ';  

 “%”代表任意字符;

    “_”代表单个字符;

例:select * frome t_student where stuName like ‘张三”;

       select * frome t_student where stuName like ‘张三%”;

       select * frome t_student where stuName like ‘%张三%”;//含有张三的任意字符

       select * frome t_student where stuName like ‘张三_”

例:查询学生表(student)中姓刘的学生的信息。

mysql>select * from student where sname like '刘%';

例:查询学生表中姓名第二个字为阳的学生信息。

mysql>select * from student where sname like '_阳%';  //_指代一个字符

本文由金沙澳门官网发布于数据库信息,转载请注明出处:Mysql学习笔记_1,相比hive和mysql查询汇总

关键词: 金沙澳门官网

上一篇:数据库SQL优化大总结之
下一篇:没有了