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

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
‘_阳%’;  //_代替二个字符

 

5、范围查询(关键字between .. and
.. , in())。

mysql>select * from 表名 where
列名  between 字段值(小) and 字段值(大);//满含两端的字段值

mysql>select * from 表名 where 列名 in
(字段值1,字段值2,……);

带and的多规格查询:

select 字段1,字段2…frome 表名 where 条件表明式1 and 法则表明式2 [and
条件发挥式n]

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

 

带or的多规格查询

select 字段1,字段2…frome 表名 where 条件表明式1 or 口径表明式2 [or
条件发挥式n]

例:select * frome t_student where gradeName=’一年级’ or
age=23;//也许,条件一旦满意三个

 

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

 

对查询结果排序order by:select 字段1,字段2…from 表名 order by 属性名
[asc|desc]

例:select * frome t_student order by age desc;//降序,从大到小

       select * frome t_student order by age
asc;//升序,asc私下认可能够不写

 

 

 

举例说:查询学生表(student)中语文战表chinese在80~90分之间的有所学生音信(蕴涵80和90)
mysql>select * from student where chinese between 80 and 90;

例如:查询学生表(student)中数学战绩math为60分,70分,80分和90分的全部学生新闻。
mysql>select * from student where math in (60,70,80,90);

 

6、使用外号。

mysql>select 字段名 <as>
别名,字段名 别名,… from 表名;    //as可省略

例如:查询学生成绩表(sc)中学生姓名(sname)及总战表,sname字段用真名表示,全部课程得分总和用总分表示。
mysql>select sname as 姓名,chinese+math+english 总分 from sc;

 

7、分组查询(关键字group
by)。

mysql>select 列名,count(列名) from 表名
group by 列名;

分组查询group by

group by 属性名 [having 条件表达式][with rollup] 
 独立使用(毫无意义,不能够独立行使);

与group_concat()函数一同使用;

例:select
gradeName,group_concat(stuName) from t_student group by
gradeName;

 

与聚合函数一同行使;

例:select
gradeName,count(stuName) from t_student group by gradeName;

 

与having一齐利用(展现输出的结果);

例:select
gradeName,count(stuName) from t_student group by gradeName having
count(stuName)

 

与with rollup
一同利用(最终参加二个总和行);

例:select
gradeName,group_concat(stuName) from t_student group by gradeName with
rollup;

 

比方:查询每一种机关的职工人数,依据机构编号(deptno)对职员和工人开展分组,重回各单位职工人数。
mysql>select deptno,count(empno) from emp group by deptno;
 //empno–职员和工人编号,emp–职员和工人表

having:对分组后的结果开展标准化限制
举例:查询每种机关职员和工人人数大于2的有着记录,再次来到人数超过2人的单位编号及其部门人数。
mysql>select deptno,count(empno) from emp group by deptno having
count(empno)>2;

 

8、表连接查询(同不经常间提到多少个表的询问称为连接查询,用来连接五个表的规范称为连接条件)。

A)内连接:join,inner join

B)外连接:left join,left outer join,right join,right outer
join,union

C)交叉连接:cross join

内连接:  表1  join
表2  on  表1.字段名=表2.字段名;             
//内连接查询(两张或上述的表连接起来查询需求的数目)

例:查询职员和工人表(emp)中的职员和工人号(empno)、职员和工人姓名(empname)、部门号(deptno)和单位名称(deptname),部门名称字段在部门表(dept)中.

mysql> select empno,empname,emp.deptno,deptname from emp join dept on
emp.deptno=dept.deptno;

外接连查询(两张或以上的表连接起来查询某张表的音讯) 
1.左外接连:  表1  left join  表2    on   
表1.列名 = 表2.列名; 

表1用作主表,主表中的全数记录都会输出,和从表相配不上的字段用null举行补齐。

例:以职工表(emp)为主表完毕上述查询。

mysql> select empno,empname,emp.deptno,deptname from emp left join
dept on emp.deptno=dept.deptno;

2.右外接连:  表1 
right join  表2   on   表1.列名=表2.列名;

表2为主表,主表中的全部记录都会输出,和从表相配不上的字段用null实行补齐。

例:以机关表(dept)为主表完成上述查询。

mysql> select empno,empname,emp.deptno,deptname from emp right join
dept on emp.deptno=dept.deptno;

 3.多规格连接查询

冠亚体育手机网站,select * from t_book,t_bookType where
t_book.bookTypeId=t_bookType.id and t_book.price>70;

子查询

1.带in关键字的子查询(八个查询语句的尺码可能落在另二个select语句的查询结果中)

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

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

 

2.带相比较运算符的子查询(子查询能够选择相比较运算符)

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

 

3.带exists至关心珍惜要字的子查询(参预子查询查询到记录,则打开外围查询,不然,不进行外层查询)

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

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

 

4.带any重要字的子查询(any关键字表示满意在那之中任一条件)

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

 

5.带all重视字的子查询(all关键字表示知足全体法则)

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

 

 

4.联合查询

 

1.union

选拔union关键字是,数据库系统会将装有的查询结果合併到一同,然后去掉一样的笔录;

select id from t_book union select id from t_bookType;

 

2.union all

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

select id from t_book union all select id from t_bookType;

 

9、表的复制。

mysql>create table 新表表名 select *
from 被复制表表名; //新表的表结会谈多少与原表同样。

mysql>create table 新表表名 select 列名1,列名2,… from 被复制表表名;
 //能够经过在select查询中钦定字段来界定出现在新表中的字段
mysql>create table 新表表名 select * from 被复制表表名 where
0=1; //通过使用select语句成立已存在表的空别本(即创设一样表结构,但不复制原表数据苏醒),何况重临一个空结果集。

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

11、聚合函数。

a)再次回到钦定列非空值的个数

mysql>select count(列名) from
表名;

例:查询学生表(student)中学生的总人数。

mysql>select count(sno) from student;
 //依据学生学号计算学生个数,学号不为空且独一

b)重临内定列的最值
mysql>select max(列名) from 表名;
 //重回钦点列的最大值

例:查询学生表(student)知命之年龄(sage)最大的上学的小孩子姓名(sname)和年龄。

mysql>select sname,max(sage) from student; 
mysql>select min(列名) from 表名;   //再次来到钦定列的最小值

例:查询学生战表表(sc)中语文战表(chinese) 最低的学习者的学号(sno)和语文成绩。

mysql>select sno,min(chinese) from sc;

c)再次来到钦命列的平均值
mysql>select avg(列名) from
表名;

d)重回钦命列的全体值之和
mysql>select sum(列名) from 表名;

5.脱离客户端

  exit;  quit;    \q      Ctrl+c   
  (自便贰个就能够)

6.mysql的别的操作

1.数据库的导入导出。

导出数据库:mysqldump -u 客商名 -p  数据库名>数据库名.sql

导入数据库:source 数据库名.sql

2、展现协助命令清单。

mysql> \h; //(加分号和不加分号结束都不影响命令试行)

3、清除当前输入的言辞(命令)。

mysql> \c

4、查询当前安装的MySQL服务器的版本号。

mysql> select version();

5、查看MySQL服务器状态音信(包蕴版本号,下边三个指令试行效果等同)。

mysql> status;  //(加分号和不加分号甘休都不影响命令实行)

mysql> \s

 

===========================================================================================================

MySQL、DB2、Oracle、SQL
Server、MariaDB等等,由于MySQL已是Oracle旗下产品,大概会被闭源,不再无需付费,但MariaDB数据库管理种类是MySQL的三个分段,首要由开源社区在维护,MariaDB是一心包容MySQL,包罗API和命令行,使之能自在形成MySQL的替代品。在仓库储存引擎方面,MariaDB基于事务的玛丽亚存款和储蓄引擎,替换了MySQL的MyISAM;使用XtraDB来代替MySQL的InnoDB。

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注