mysql入门语法

本篇摘录于《mysql必知必会》这本书,其涉及的都是入门语法;
对于大多数mysql使用者,使用最多的是增删查改,那么掌握下面这些基本语法就能满足日常的基本工作,当然,这只是入门,如果想进一步了解数据库,还请了解事务和存储过程。

1.全查:
	select表示查询
	* 表示查询全部字段
	from 表示来自哪一张表

2.查询某一个字段的值(不是全查)
	select 字段 from 表名

3.查询多个字段的值
	select 字段1,字段2,... from 表名
	注意:要查询的字段与字段之间用英文逗号(,)隔开。

4.条件查询
	select * from 表名 where 条件
	Where 表示条件(条件关键字),在where之后跟过滤的条件
	注意:逻辑运算符:< = > <= >= !=(<>)
	注意:条件语句中条件的值需要加单引号(''),用单引号包裹。

5.多条件查询,(与)
	select * from 表名 where 条件1and条件2 and...
	and 关键字表示 和(并且),需要两边条件两边同时满足


6.多条件查询,(或)
	select * from 表名 where 条件1 or 条件2 or...
	or 关键字表示 或,需要两边条件满足一边即可。

7.区间查询
	select * from 表名 where 字段 between 左区间值 and 右区间值
	between ... and ... 关键字表示什么区间内,范围在and前后表示
	
8.以集合方式查询
	select * from 表名 where 字段 in(左区间值,右区间值)
	in 关键字表示多个or,在“in”后边的括号呢多个值用逗号隔开

9.排序
	select * from 表名 order by 字段
	order by 关键字表示排序,默认为正序(asc),倒序(desc)

10.模糊查询
	select * from 表名 where 字段 like '%字段含有的部分值%'
	like 关键字表示模糊,后边跟'%字段含有的部分值%',前边要根据哪一个字段查询
	'字段含有的部分值%':表示模糊值在前不确定值在后
	'%字段含有的部分值':表示模糊值在后不确定值在前

11.分页查询
	select * from 表名 limit 开始记录的位置,显示几条数据
	注意:分页的数据为数字

12.别名的命名
	select 字段 as 别名 from 表名
	as关键字表示命名别名,关键字之前是要命名的字段或者表,之后是命名的别名
	注意:as可以省略。

13.求最大值
	select max(字段) from 表名
	max 表示最大,后边跟括号,括号中填写字段。

14.求最小值
	select min(字段) from 表名
	min 表示最小,后边跟括号,括号中填写字段。

15.求平均值
	select avg(字段) from 表名
	avg 表示平均,后边跟括号,括号中填写字段。

16.求和
	select sum(字段) from 表名
	sum 表示求和,后边跟括号,括号中填写字段。

17.求个数  
	select count(字段) from 表名
	count 表示求个数,后边跟括号,括号中填写字段。
18.子条件查询
	select * from 表名 where 字段=(查询内容)
	例如:select * from 学生 where 成绩=(select max(成绩)from 学生)
	译:查询学生表中成绩最好的学生的有关信息

19.分组函数
	select 字段1【必须填写分组根据字段】,函数(字段)【填写能显示能以组为单位显示的字段】from 表名 group by 字段【分组依据字段】
	group by 关键字表示分组,按照某一个字段分组,相同的值组成一组。
	注意:分组函数一般与函数以前使用

20.分组加条件查询
	select 字段1,函数(字段2)as 别名 from 表名 group by 字段1 having 条件【这里一般跟查询的字段】
	having 关键字表示条件,为分组函数的专用条件关键字

21.多表联合查询
	select * from 表名1,表名2  -- 相当于交叉连接
	注意:多表查询时,表与表之间用逗号(,)间隔
	了解:多表查询时,如果不对结果进行过滤,则得到的是两边数据的乘积,此种形式称为迪卡尔乘积

22.多表联合查询加条件过滤
	select * from 表1,表2 where 表1.字段=表2.字段
	注意 条件的字段必须有关联

23.左联接查询:
	select * from 表名1 left join 表名2 on 表名1.字段=表名2.字段
	left join 关键字表示左联接查询
	用法:tablel left join table2 on 条件
	注意:on条件关键字必须加入
	效果:以左表为准。右表数据匹配,有匹配数据则获取,如果左表有数据右表没有,
	则以null填充,如果右表有的数据左表没有,则过滤。

24.右联接查询:
	select * from 表名1 right join 表名2 on 表名1.字段=表名2.字段
	left join 关键字表示右联接查询
	用法:tablel right join table2 on 条件
	注意:on条件关键字必须加入
	效果:以右表为准。左表数据匹配,有匹配数据则获取,如果右表有数据左表没有,
	则以null填充,如果右表有的数据右表没有,则过滤。

25.内连接查询
	select * from 表名1 inner join 表名2 on 表名1.字段=表名2.字段
	inner join 关键字表示内连接
	用法:table1 inner join table2 on 条件
	效果:量表数据同时匹配,如果任意一边没有匹配,则过滤。

26.空值的查询方式
	select * from 表名 where 字段=''	查询该字段内容为空的记录
	select * from 表名 where 字段='null'	查询该字段内容为null的记录
	select * from 表名 where 字段 is null 	查询该字段内容"默认"为空的记录
	-- 注意,这里容易出现混淆,当建立表的时候,有些字段默认为NULL,这是查询用 is NULL或is not NULL,
	当表里面字段没有说明默认为空,仅仅是因为字段缺失或者其他原因而是一个空值,这是要用 =' '

27.插入记录
	insert into 表名(字段1,字段2...)values('值1','值2',...)
	insert	表示插入
	into	表示插入到哪一张表(可以省略,推荐使用)
	values	表示值(值必须用单引号【''】包起来)
	注意:在新增时,字段指定到哪一个位置,其值也必须在哪一个位置。
	
28.更新(修改)记录
	update 表 set 字段='值'where 字段名='值'
	update	表示修改
	set	表示赋值(设置)
	注意:一定要加条件,指明要修改的是那一条数据。一定要做好备份,预防出错后无法修改

29.删除记录
	delete from 表 where where 字段='值'
	delete	表示删除
	注意:注意:一定要加条件,指明要删除的是那一条数据。一定要做好备份,预防出错后无法挽回

30.建立视图
	select 字段1,字段2,、、、from 表名
	视图的用法跟表的用法一模一样。
	视图和原表是用的同一个内存空间,只是在不同的位置显示
	
31.存储过程
为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批文件

#调用:存储过程的执行,语句为CALL
CALL接受存储过程的名字以及需要传递给它的任意参数

call productprincing(@princelow
                     @princehigh
                     @princeaverage
                   );
                   
执行名为productpricing的存储过程,
它计算并返回产品的最低、最高和平均价格

#创建存储过程
create procedure productprincing(参数)
begin
     select avg(prod_price) as priceaverage
     from products ;
end;

#调用上述存储
call productpricing();

CALL productpricing();执行刚创建的存储过程并显示返回
的结果。因为存储过程实际上是一种函数,所以存储过程名后
需要有()符号(即使不传递参数也需要)

##删除存储过程
drop procedure productpricing;
请注意没有使用后面的(),只给出存储过程名

###使用参数(存储于事务的区别)###
一般,含参数的存储过程并不显示结果,而是把结果返回给你指定的变量

##创建存储过程
create procedure productpricing()
        out pl decimal(8,2),
        out ph decimal(8,2),
        out pa decimal(8,2)
    )
    begin
        select min(prod_price) into pl from products;
        select max(prod_price) into ph from products;
        select avg(prod_price) into pa from products;
    end;
    
in 传递给存储过程
out 从存储过程传出
into 对存储过程传入和传出

##call调用存储过程(相当于是赋予变量名)
call productpricing(@pricrlow,
                    @pricehigh,
                    @priceaverage);

在调用时,这条语句并不显示任何数据。它返回以后可以显示(或在其他处理中使用)的变量
**所有MySQL变量都必须以@开始**

##显示检索出的结果
select @pricelow;
select @pricelow,@pricehigh,@priceaverage;


###in和out参数的区别###
#创建存储过程
create procedure ordertotal(
        in onumber int,
        out ototal decimal(8,2)
)
begin
    select sum(item_price*quantity) from orderitems
    where order_num=onumber
    into ototal;
end;

/*
onumber定义为IN,因为订单号被传入存储过程。
ototal定义为OUT,因为要从存储过程返回合计。
SELECT语句使用这两个参数,WHERE子句使用onumber选择正确的行,
INTO使用ototal存储计算出来的合计。
*/

#调用储存过程
call(20005,@total)

#显示查询结果
select @total
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值