sql语句不区分大小写
SQL语言的分类:
DDL:数据库定义语言,用来定义逻辑数据库、表、列、等信息。
使用的关键字:create(创建)、alter(修改)、drop(删除)
DCL:数据控制语言,用来定义用户、以及权限等信息。
DML:数据操作语言,用来操作表数据。
使用的关键字:insert(添加)、update(修改)、delete(删除)
DQL:数据库查询语言:用来查询数据的。使用的关键字:select......from......where......
一、DDL:数据库相关操作语句
1、创建数据库:
create database 数据库名称;
create database 数据库名称 character set 字符集;
2、查看当前mysql中的所有数据库:
show databases;
3、查看某个数据库的定义信息:
show create database 数据库名;
4、删除数据库:
drop database 数据库名;
5、查看当前正在使用的数据库:
select database();
6、切换数据库
use 数据库名;
表操作相关的SQL语句(重点)
1、创建表:
create table 表名(
字段名1 数据类型(长度) [约束],
字段名2 数据类型(长度) [约束],
字段名3 数据类型(长度) [约束],
...... ,
字段名n 数据类型(长度) [约束] //注意:最后一个字段后边不加“,”。
)
create table student (
name vachar(32),
age int,
sex char(1)
);
2、查看数据库中的所有表;
show tables;
3、查看表结构
desc table;
4、删除表
drop table 表名;
5、修改表:
1).作用:修改表添加列.
alter table 表名 add 列名 类型(长度) [约束];
例如:
#1,为分类表添加一个新的字段为 分类描述 varchar(20)
ALTER TABLE category ADD `desc` VARCHAR(20);
2).作用:修改表修改列的类型长度及约束.
alter table 表名 modify 列名 类型(长度) 约束;
例如:
#2, 为分类表的描述字段进行修改,类型varchar(50) 添加约束 not null
ALTER TABLE category MODIFY `desc` VARCHAR(50) NOT NULL;
3).作用:修改表修改列名.
alter table 表名 change 旧列名 新列名 类型(长度) 约束;
例如:
#3, 为分类表的分类名称字段进行更换 更换为 description varchar(30)
ALTER TABLE category CHANGE `desc` description VARCHAR(30);
4).作用:修改表删除列.
alter table 表名 drop 列名;
例如:
#4, 删除分类表中description这列
ALTER TABLE category DROP description;
5).作用:修改表名
rename table 表名 to 新表名;
例如:
#5, 为分类表category 改名成 category2
RENAME TABLE category TO category2;
6).作用:修改表的字符集
alter table 表名 character set 字符集(了解);
例如:
#6, 为分类表 category 的编码表进行修改,修改成 gbk
ALTER TABLE category CHARACTER SET gbk;
二、DML:数据操作语言(记录操作相关的SQL语句<重点掌握>)
1、添加:有两种语句:
A).insert into 表名 values(值1,值2,...,值n);
例如:
insert into s3 values('wangwu',25);
注意:
1).表中有多少字段,values()里面就必须要出现几个值。不添加的字段,使用null占位。
insert into s3 values('zhouliu',null);
2).SQL语句中,"值"如果是"字符串/日期"类型,必须要使用一对单引号,或者一对双引号括起来。
如果是"数值"类型,可以不加引号。
B).insert into 表名(字段1,字段2,...,字段n) values(值1,值2,...,值n)
例如:
insert into s3(age) values(23);
注意:
1).字段列表:可以是部分字段;也可以不按定义顺序出现;
2).值列表:必须同前面的"字段列表"保持数量、顺序一致。没有出现的字段,本次默认添加:null
怎样选择:
1).如果添加所有字段,使用A;
2).如果添加部分字段,使用B;
2、修改:
update 表名 set 字段1 = 值1,字段2 = 值2 ,...., 字段n = 值n where 条件;(所有符合条件的记录全部被修改)
例如:
update s3 set age = 23 , stuName = 'zhouliu' where stuName = 'zhagnsan';
3、删除:
delete from 表名 where 条件(所有符合条件的记录全部被删除)
例如:
delete from s3 where stuName = 'zhangsan';
三、DQL:数据库查询语言:
1、去重查询和列值计算
1).去重查询:
select distinct 属性名 from 表名;
例如:
select distinct category_id from product;
1).对列值进行运算:
select pname,price + 100 from product;
注意:只对查询结果的price增加100,表中的原值不变。
2、条件查询
1)、比较运算符:
1). > : 大于;常用:"数值类型"和"日期类型"
例如:查询所有价格高于2000元的商品信息
select * from product where price > 2000;
查询所有生产日期大于2017年12月01日的商品
select * from product where prodate > '2017-12-01';
2). < : 小于;常用:"数值类型"和"日期类型"
例如:查询所有价格低于2000元的商品信息
select * from product where price < 2000;
查询所有生产日期小于2017年12月01日的商品
select * from product where prodate < '2017-12-01';
3). >= : 大于等于:常用:"数值类型"和"日期类型"
例如:查询所有价格大于等于2000元的商品信息
select * from product where price >= 2000;
查询所有生产日期大于等于2017年12月01日的商品
select * from product where prodate >= '2017-12-01';
4). <= : 小于等于:常用:"数值类型"和"日期类型"
例如:查询所有价格小于等于2000元的商品信息
select * from product where price <= 2000;
查询所有生产日期小于等于2017年12月01日的商品
select * from product where prodate <= '2017-12-01';
5). = : 等于:任何类型字段:"数值类型"、"日期类型"、"字符串类型"
例如:查询所有价格等于2000元的商品信息
select * from product where price = 2000;
查询所有生产日期等于2017年12月01日的商品
select * from product where prodate = '2017-12-01';
查询商品名称等于"劲霸"的商品信息:
select * from product where pname = '劲霸';
6). != : 不等于:任何类型字段:"数值类型"、"日期类型"、"字符串类型"
例如:查询所有价格不等于2000元的商品信息
select * from product where price != 2000;
查询所有生产日期不等于2017年12月01日的商品
select * from product where prodate != '2017-12-01';
查询商品名称不等于"劲霸"的商品信息:
select * from product where pname <> '劲霸';
<> : 不等于
2)、逻辑运算符:
1).and : 逻辑与,语义:"并且"
例如:查询价格高于2000元的电脑类商品
select * from product where price > 2000 and category_id = '电脑';
查询2017年12月份生产的商品
select * from product where prodate >= '2017-12-01' and prodate <= '2017-12-31';
2).or : 逻辑或,语义:"或者"
例如:查询不是在2017年12月份生产的商品
select * from product where prodate < '2017-12-01' or prodate > '2017-12-31';
查询服装类和电脑类的所有商品
select * from product where category_id = '服装' or category_id = '电脑';
3).not : 逻辑非,语义:"不是.."
例如:查询不是在2017年12月份生产的商品
select * from product where not(prodate >= '2017-12-01' and prodate <= '2017-12-31');
3)、范围查询:
between ...(包含)(小值) and ...(包含)(大值)
例如:查询商品价格在1000元到3000元之间的商品
select * from product where price >= 1000 and price <= 3000;
或者:
select * from product where price between 1000 and 3000;
查询在2017年12月份生产的商品:
select * from product where prodate between '2017-12-01' and '2017-12-31';
4)、IN语句:
代替多个or的等性判断的。
例如:查询商品价格等于:1000元、2000元、3000元、4000元的商品
select * from product where price = 1000 or price = 2000 or price = 3000 or price = 4000;
使用in语句:
select * from product where price in (1000,2000,3000,4000);
查询服装类和电脑类商品:
select * from product where category_id in('服装','电脑');
5)、模糊查询:
like 通配符:"%":通配任意长度的字符;"_":通配一个长度的字符;
例如:查询商品名称中包含"花"的商品:
select * from product where pname like '%花%';
查询商品名称中以"花"开头,名称一共只有两个字的商品
select * from product where pname like '花_';
6)、查询"NULL":
例如:添加:insert into product values(13,'果9’,1,null,null);
查询:select * from product where category_id = null ; //错误,不成查询出结果
select * from product where category_id is null; //正确。
-------------------------------------------------
添加:insert into product values(14,'果10',2,'','');
查询:select * from product where category_id = '';
3、排序:
1).有些时候,我们需要对查询结果进行按某列进行排序,这时,使用排序语句:order by 排序字段 asc(升序--默认) / desc(降序)
2).例如:
1).查询商品信息,将结果按价格升序排序:
select * from product order by price asc;
2).查询所有的服装类商品,将查询结果按"生产日期"降序排序:
select * from product where category_id = '服装' order by prodate desc;
3).对多列进行排序:查询服装类商品信息,将结果按"生产日期"降序排序,如果生产日期相同,按价格升序排序。
select * from product where category_id = '服装' order by prodate desc , price asc;
注意:只有当第一排序列的值相同时,才会按第二排序列排,否则,会忽略第二排序列。
4、SQL查询_聚合函数:
1).count(*/字段名):统计指定列不为NULL的记录"行数";
例如:查询服装类商品共有多少个?
select count(*) from product where category_id = '服装';
2).sum(字段名):计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
例如:查询服装类商品的总价格:
select sum(price) from product where category_id = '服装';
3).max(字段名):计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
例如:查询服装类商品的最贵的。
select max(price) from product where category_id = '服装';
4).min(字段名):计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
例如:查询服装类商品的最便宜的。
select min(price) from product where category_id = '服装';
5).avg(字段名):计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
例如:查询服装类商品的平均价格。
select avg(price) from product where category_id = '服装';
注意:对于"聚合函数"的查询结果中,只能包含"聚合函数的结果列"(如果有分组,还可以包含分组列),
不能包含其他列,因为聚合的结果是计算出来的,跟表中的任何一条数据没有关系,所以不能关联显示其它列的值。
5、分组:
1).需求:一条语句查询出:每种商品的总价格是多少?
商品类别 总价格
服装 ...
电脑 ...
食品 ...
化妆品 ...
SQL语句:select category_id , sum(price) from product group by category_id;
2).练习:有以下学员信息表:
学员表:
ID 姓名 性别 年龄 学科
1 张三 男 22 JavaEE
2 李四 男 23 IOS
3 王五 女 18 JavaEE
4 周六 女 17 JavaEE
5 周日 女 21 IOS
A).查询各科各有多少学员?
select 学科,count(*) from 学员表 group by 学科;
B).查询男、女学员各有多少人:
select 性别,count(*) from 学员表 group by 性别;
C).查询各科中男、女学员各有多少人:
结果:
学科 性别 人数
JavaEE 男 1
JavaEE 女 2
IOS 男 1
IOS 女 1
select 学科,性别,count(*) from 学员表 group by 学科,性别;
3).注意:分组查询的结果:只能包含"分组字段"和"聚合结果字段",不要包含其它字段。
6、SQL查询_having子句:
1).需求:查询每种商品的总价格是多少,结果只列出总价格大于2000元的,其它的就不要显示了。
可能会想这样写:
select category_id, sum(price) from product where sum(price) > 2000 group by category_id;//错误的
因为:where先执行,那时还没有执行sum()聚合函数,所以where 不能对聚合函数的结果进行筛选。
使用having对聚合的结果进行筛选:
select category_id , sum(price) from product group by category_id having sum(price) > 2000;
2).书写顺序:select ... from ... where ... group by ... having ... order by ...
执行顺序:
1).from
2).where
3).group by
4).聚合函数
5).having
6).select
7).order by
网友评论