mysql 十八哥_十八哥Mysql笔记之基础篇

连接Mysql服务器

520254.html

注意 :-h指的是host地址 ;-u指的是user, 之所以打到-p回车再输入密码,是为了防止密码泄露

如果-h不写则默认是localhost

★服务器à数据库 database  à多张或一张表table(建表的同时就是声明列)

★基本的语句

(注意分号结束)

1、查看当前服务器有什么数据库:showdatabases

2、创建数据库            :create database

3、删除数据库            :drop database 数据库名

删除表                :drop table表名

4、选择要操作的数据库    :use数据库名

5、查一个数据库有什么表  :show tables;

6、修改表名 : rename table旧表名to新表名    (不能修改数据库的名字)

7、查看一个表的结构      :desc表名   (仅是查看列的结构,不含数据)

8、创建表并添加列        :  自定义表名,同时下面设置列名和类型

Create  table表名(

Num int ,

Name char(10)

Age int ) ;

以上是实例 , 注意每个属性用逗号进行隔开,最后一分号结束

Ps :age int unsigned zerofillà zerofill 表示0填充并且默认unsigned

插入数据的语句 :

Insert  into 表名

(num,name,age)values(1,’张三’,22),(2,’王四’,25);

注意 :如果插入全部属性则前者可以省略 ,如果要选择插入某些属性则修改前者即可values有个s,且必须有

注意values的拼写

插入新列的语句 :

Alter table 表名 add列名 类型 限制 after列名

限制可以是 :(1)unsigned无符号

After 是为了声明在哪一列后面,默认在最后一列,如果要放在第一则替换为first

修改表之修改列 :

Alter table 表名change旧列名 新列名 新列的类型 限制

如果要修改原来列的属性可把新列名也写为旧列名即可

修改表之删除列 :

Alter table 表名drop 列名

修改表之增加列主键 :

Alter table 表名add  primary key (列名)

如 : 令id列为主键

Alter table 表名add  primary key (id)

增加主键的时候如果出现duplicate entry错误, 就是因为主键有重复的值

修改表中某列的值 :

Update表名set

name  =  ‘李四’ , age = 30

Where

Num = 11

注意 : where设置 修改的 条件

删除表中某行的数据  :

Deletefrom 表名 where  num = 1;

注 :如果要删除多行,则需要用or

查询语句

查询全部数据   :Select * from 表名 ;

查询部分列的数据   :Select num,name  from表名 ;

条件查询 : select num,name

from 表名

where num>1

★★★所谓的建表就是 声明列的过程

520254.html

★★★插入的时候整型类型讨论

无符号和有符号分别表示不同的 能够取到的 取值范围 ,为了开发的速度合适的类型,默认是有符号存储范围也是在有符号的范围

★★属性进行初始化的赋值时 ,如果没有进行赋值则默认为 null,一般创建时可以用语句

Name char(10)  not  null  default 自定义的默认值, null不好比较一般都是自定义

★★浮点型 float(M,D)M代表精度即是总长度 ;D代表标度即是小数点

如 :price float(6,2)9999.99 ~ -9999.99

★★字符型 (注意该类型的数据需要添加单引号):

Char(M)  : 定长字符串 , 如果存的数据小于M也实占M个字符,内容不足部分补0,M代表可容纳的字符数  , 0<=M<=255, 如 :nihao五个字符

好   一个字符(三个字节)

Varchar(M) :不定长字符串,如果存的数据小于M个字符,则占数据实际的大小

0<=M<=65535 (ascii),但是它会有1到2个字节被用于记录长度

520254.html

速度上char比较快,varechar比较省资源

★★★decimal:高精度浮点数,常用于金融运算,不会出现浮点数计算的误差

★★★见识 history herstory

★★★year类型

★★★Date类型

520254.html

★★★实战建立106宿舍资料

create table ss106(

id intprimary key auto_increment,// 主键,递增

name char(4) not null default '',

age tinyint unsigned not null default 0,

email varchar(30) not null default '',

telchar(11) not null default '',             //电话号码设置为char

salary decimal(7,2) not null default 0,      //金钱的问题设置为decimal类型

intro varchar(1000) not null default ''     //此处结尾不能添加逗号!!

)charset utf8;                          //设置为utf8类型

Ps :编写以上代码时 , 单词有的打错了 , 导致修改了几次才能运行!!!所以编写代码的时候一定要认真拼写,脑中一定要有印象

★★★使用delect的时候,有时候id不存在但也能够执行语句

★★★where :  理解为使表达式是否成立,成立则为真

如 :取出数学比语文高20分的同学成绩

Select * from students

Where math-china>20

★★select中where常用运算符

520254.html

520254.html

★in : 表示在某个集合内进行取值,

如 取出学号为2,3,5的学生成绩

Select * from students where id in(2,3,5);

★between : 表示在某个范围内进行取值 ,可以取边界值

如 取出学号为2~5的学生成绩

Select * from students where id between 2 and 5 ;

这句等于

Select * from students where id >= 2 and id <= 5 ;

★not:Select * from students where id != 2 ;

Select * from students where not in (2,3);

★like : 模糊查询

(1)取出以某文字开头的 :文字%

如 :取出姓张的成绩

Select * from students where name like ‘张%’;

Ps :不姓张则not like

(2)取出限定字数的 : 文字_ ,一个下划线一个字

Select * from students where name like ‘张_’;

★★★select 之group: 使用于统计,一般配合统计函数用

520254.html

★      Max :

如 :找出最高成绩

Select max(grade) from students ;

Sum :

如 :求出所有商品库存总和

Select sum(goods_num) from goods ;

Avg :

如 :求出所有手机价格的平均价格

Select avg(price) from goods ;

Conut :

如 :求出行数

Select count(*) from goods ;

★group by: 进行分组和按此列排序,并在分组中寻找和要求的 ,经常和集函数一起使用 , 如果不和集函数使用也是取出分组的排在第一位置的

如 :寻找同分组,最高价格

Select cat_id , max(price) from goods group by type_id;

Ps :添加其他的选项没意义

★把列名当做变量名进行运算 (注:显示出来的栏目统计函数显示的时候会自己占列)

520254.html

Ps : 显示的名字可以用as令命名

520254.html

★★having 语句 :

Where 语句不能够 对查询的结果进行操作,需要进一步的操作必须受使用having

如 :查询市场的手机价格和店铺手机价格之间差价为100元的手机

(1) 错误的

Select good_id,good_name,market_price-shop_price as chajia from goods where chajia>100;

(2)正确的

Select good_id,good_name,market_price-shop_price as chajia from goods where market_price-shop_price >100;

但计算了两次

(3)用having语句 :

Select good_id,good_name,market_price-shop_price as chajia from goods having chajia>100;

★having和where同时使用

如 :查询栏目3的,市场的手机价格和店铺手机价格之间差价为100元的手机

Select good_id,good_name,market_price-shop_price as chajia from goods where good_id = 3 having chajia>100;

◇实战 :计算挂科数目在2科以上的同学的平均成绩

520254.html

Select name,sum(score<60) as shumu,avg(score) as pj from students group by name haing shumu>=2 ;

★★★order by :改变排序的依据,一般默认升序 , 如果要改为降序则要添加desc

Order by 列名1[desc/asc],列名2[desc/asc];

如 :按照价格进行降序排列,在价格排序好之后,如果价格一样的再按照id排

select id,price from goodsorder byprice,id desc

★limit  : 配合order by使用,限制选出来的条数

Limit 偏移的数目,限制的条数à偏移的数目可以不写默认为0

如 :按照价格进行降序排列,在价格排序好之后,如果价格一样的再按照id排,且只取出4,5,6行的数据

select id,price from goodsorder byprice,id desc limit 3,3;

★★★ 特殊的错误 :

★★如果出现这个情况,分号在前面,就会使任何的语句都不能执行,需要输入’;进行结束(即是一个分号和冒号)

520254.html

★★版本不支持中文

520254.html

★★我擦,用一个insert语句,错了这么多个地方,第一个地方就版本不支持中文,第二个坑爹的地方就是 输入的 字符中含有 中文的字符,特别是标点的问题 , 唉……

★★★where , group by , having , order by , limit多个时,按照这个顺序进行抒写

★★★

★★复制一张表(只是复制表结构) : create  table表名like被复制的表名

★★复制某张表的数据 :insert  into表名from被复制的表名(后能加order by等)

★★清空一张表的数据 :truncated表名

★★★巧妙的运用

★★查询(select)的结果一般都是一个表结构,所以可以把结果当做表使用,用括号区别

如 :select * from (select id,cat_id,goods_name,shop_price from goods order by cat_id) as temp group by shop_price;

括号内的查询结果当做一个已有的表进行处理,*表示括号内有的列,把括号内的表称为temp

★★把查询结果当做条件使用 :

如 :select goods_id , goods_name from goods where

goods_id = (select max(goods_id ) from goods) ;

★★where带入行中看是否成立来理解,列看做变量来理解可以运算,查询的结果当做临时表来理解

★★★where型子查询 :把内层的查询结果作为外层查询的比较条件,用 in来表示在里面

如 :取出每个栏目中价格最贵的商品

Select id,cat_id,shop _price from goodswhereshop_pricein (select max(shop_price) from goods group by cat_id);

注意 :这里巧妙地把一个查询的结果组作为 外层的查询条件;内层不用cat_id也可以,因为那只是表示显示出来的栏目而已

★★★From型子查询 : 把内层的查询结果当成临时表,供外层Sql再次查询

注意 :使用from型的子查询必须 添加别名 , 即是as

否则出现这个错误

520254.html

如 :取出每个栏目下最新的商品

Select * from (select id,cat_id,goods_name from goods order by cat_id asc,id des) as temp group by cat_id ;

先排序好,再按栏目进行取出来

★★★不允许这样操作

520254.html

★★★找出挂科两门以上同学的平均成绩

select name,avg(score) from students where name in (select name from(select name,count(*) as num from students where score = 2) as temp) group by name;

把题目进行分解  两个以上,不及格,平均成绩

所以先找出两科以上,不及格的学生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值