目录
一、查看数据库
二、切换数据库
三、查看数据库中的表
四、表的增删改查;
五、字段的修改与添加
六、算术运算符
七、 聚合函数在表查询中的使用
count()
max()
min()
avg()
sum()
八、条件查询
使用in关键字查询
使用BETWEEN AND关键字查询
使用空值查询
使用LIKE关键字查询
使用LIMIT限制查询结果的数量
使用GROUP BY进行分组查询
使用 order by 对查询结果进行排序。
带有“_”通配符的查询
九、 多表连接查询
交叉连接(CROSS JOIN)
内连接(INNER JOIN)
外连接 (OUTER JOIN)
左外连接
右外连接
group by 与group_concat()
group by 与聚合函数
group by 与 with rollup
group by与having用法
having和where的区别:
子查询
IN | NOT IN
EXISTS | NOT EXISTS
登录mysql
mysql -uroot -p
一、查看数据库
Class_Linux库名;name表名;
查看数据库
SHOW DATABASES;
SHOW SCHEMAS;
二、切换数据库
切换数据库
use Class_Linux ;
三、查看数据库中的表
查看数据库中的所有表
show tables;
#查看单表的创建信息
show create table name;
四、表的增删改查;
select * from name;
查看指定字段的数据;
select 字段名 from 表名;
select name from name;
查看某个字段时,将其字段名在显示时重命名:
select 字段名 as 重命名的字段名 from name;(as可以省略)
select name as 姓名 from name;
带条件的查询;
where 后面跟条件;
select * from name where name='崔倍';
带常数的查询;
去重查询:
使用distinct()方法;
select distinct(name) from name;
增加数据;
insert into name values(NULL,'李饼','男','21','2000-4-2','100');
修改数据;
update name set age='19' where id='1';
(修改id为1的年龄为19)
如果不加where表示这一个字段的值都被修改为19:
删除数据;
例如:删除id为3的纪录。delete from name where id='3';
五、字段的修改与添加
增加新的字段名:
alter table name add birth varchar(20) default NULL after age;
table_name :表名;
birth:需要添加的字段名;
varchar(20):字段类型为varchar,长度20;
defalt NULL :默认值NULL;
age:新增字段添加在old_column字段后面。
删除字段是将数据表中的某个字段从表中移除,语法格式如下:
ALTER TABLE <表名> DROP <字段名>;
alter table name drop csny;
修改表字段类型
alter table name modify xb char(5);
修改表字段名:
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;
alter table name change xb sex char(4);
六、算术运算符
在SELECT查询语句中还可以使用加减乘除运算符。 查询学生10年后的年龄 MySQL命令:
七、 聚合函数在表查询中的使用
在开发中,我们常常有类似的需求:统计某个字段的最大值、最小值、 平均值等 等。为此,MySQL中提供了聚合函数来实现这些功能。所谓聚合,就是将多行汇总 成一行;其实,所有的聚合函数均如此——输入多行,输出一行。聚合函数具有自动 滤空的功能,若某一个值为NULL,那么会自动将其过滤使其不参与运算。
聚合函数使用规则: 只有SELECT子句和HAVING子句、ORDER BY子句中能够使用聚合函数。例如,在 WHERE子句中使用聚合函数是错误的。
count()
select count(字段名) from 数据表名;
max()
select max(字段名) from 数据表名;
min()
select min(字段名) from 数据表名;
avg()
select avg(字段名) from 数据表名;
sum()
select sum(字段名) from 数据表名;
八、条件查询
数据库中存有大量数据,我们可根据需求获取指定的数据。此时,我们可在查询语句 中通过WHERE子句指定查询条件对查询结果进行过滤。
使用in关键字查询
in关键字用于判断某个字段的值是否在指定集合中。如果字段的值恰好在指定的集合 中,则将字段所在的记录将査询出来。
使用BETWEEN AND关键字查询
BETWEEN AND用于判断某个字段的值是否在指定的范围之内。如果字段的值在指定 范围内,则将所在的记录将查询出来;
使用空值查询
在MySQL中,使用 IS NULL关键字判断字段的值是否为空值。请注意:空值NULL不 同于0,也不同于空字符串;
使用LIKE关键字查询
%用于匹配任意长度的字符串。例如,字符串“a%”匹配以字符a开始任意长度的字符 串 用于匹配一个任意的字符串。列入,字符串"ab"匹配"ab"开始长度为3的字符串,如 abc、abp等等..
使用LIMIT限制查询结果的数量
desc降序排序,asc升序排序,asc也是默认排序;
使用GROUP BY进行分组查询
统计学生男女人数 MySQL命令:
select count(sex), sex from name group by sex;
使用 order by 对查询结果进行排序。
从表中査询出来的数据可能是无序的或者其排列顺序不是我们期望的。为此,我们可 以使用ORDER BY对查询结果进行排序
升序排列 MySQL命令格式: 降序排列 MySQL命令格式:
select 字段名 from 数据表名 order by 字段名;
降序排列 MySQL命令格式:
select 字段名 from 数据表名 order by 字段名 desc;
带有“_”通配符的查询
like
select * from name where name like '_倍';
“_”只能代表单个字符,字符的长度不能为 0。例如, a_b 可以代表 acb、adb、aub 等字符串。
九、 多表连接查询
交叉连接(CROSS JOIN)
笛卡尔积 交叉连接(CROSS JOIN):有两种,显式的和隐式的2种,一般用来返回连接表的笛卡 尔积。 笛卡尔积(Cartesian product)是指两个集合 X 和 Y 的乘积。
例如,有 A 和 B 两个集合,它们的值如下:
A = {1,2}
B = {3,4,5}
集合 A×B 和 B×A 的结果集分别表示为:
A×B={(1,3), (1,4), (1,5), (2,3), (2,4), (2,5) };
B×A={(3,1), (3,2), (4,1), (4,2), (5,1), (5,2) };
以上 A×B 和 B×A 的结果就叫做两个集合的笛卡尔积 并且,从以上结果我们可以看出:
1)两个集合相乘,不满足交换率,即 A×B≠B×A。
2)A 集合和 B 集合的笛卡尔积是 A 集合的元素个数 × B 集合的元素个数。
多表查询遵循的算法就是以上提到的笛卡尔积,表与表之间的连接可以看成是 在做乘法运算。在实际应用中,应避免使用笛卡尔积,因为笛卡尔积中容易存 在大量的不合理数据,简单来说就是容易导致查询结果重复、混乱。
交叉连接返回的结果是被连接的两个表中所有数据行的笛卡儿积。
MySQL:语法格式:
SELECT <字段名> FROM <表1> CROSS JOIN <表2> [WHERE子句];
或
SELECT <字段名> FROM <表1> , <表2> [WHERE子句];
#语法说明如下:
#字段名:需要查询的字段名称。
#<表1><表2>:需要交叉连接的表名。 (”,“是表示隐式)
#WHERE 子句:用来设置交叉连接的查询条件。
有两个表students表和course表:
students表:
course表:
students表*course表
course表*students表
内连接(INNER JOIN)
内连接(INNER JOIN)主要通过设置连接条件的方式,将符合连接条件的数据予以保留,不符合的数据不保留
内连接使用 INNER JOIN 关键字连接两张表,并使用 ON 子句来设置连接条件。如果 没有连接条件,INNER JOIN 和 CROSS JOIN 在语法上是等同的,两者可以互换。
内连接的语法格式如下:
将两个表连接起来,只查询students表的id,name,course_id和course表的id,course_name字段中满足students表中的course_id 等于course表中的id的数据;
其中students s是给students表起了一个别名为s,这样写起来方便;
给上面的数据加了一个条件,course表中的id等于1,也就是只过滤出了选了Java课程的学生的id,name与course_id;
外连接 (OUTER JOIN)
而外连接会先将连接的表分为主表和参考表,再以主表为依据返回满足和不满足条件的记录。 外连接可以分为左外连接和右外连接2种,下面根据实例分别介绍左外连接和右外连接。
外连接也就是取出连接表中匹配到的数据,匹配不到的也会保留,其值为NULL;
- 左外连接(left outer join):以左边的表为主表
- 右外连接(right outer join):以右边的表为主表
以某一个表为主表,进行关联查询,不管能不能关联的上,主表的数据都会保留,关联不上的以NULL显示;
(引用了连接中博主的内容
MySQL—内连接和外连接区别_mysql内连接和外连接的区别_leon.han的博客-CSDN博客)
左外连接
select s.id,s.name,s.course_id,s.height,c.id,c.course_name from students s left outer join course c on s.course_id=c.id and s.height>175;
以students表为主表,查询满足students表中的course_id等于course表中的id并且students表中的height字段的值要大于175;
由结果可以看到,只有students表中的id号为3和9的满足上面是条件,所以它们的基表course中的字段值可以保留,而students表中除了id号为3和9的其他都不满足条件,所以它们的基表course中的字段值为NULL;
也就是说,在左外连接中,主表的字段值都可以保留,而基表只有满足条件的字段值才可以保留,不满足条件的基表的字段值为NULL;
右外连接
以course表为主表,查询既满足s.course_id=c.id又满足s.height>175的数据;
因为是右外连接,所以基表中所查询的字段值都可以保留,而基表students表中只有满足条件的才可以保留,其他不满足条件的均为NULL;
group by 与group_concat()
GROUP BY 关键字可以和 GROUP_CONCAT() 函数一起使用。GROUP_CONCAT() 函 数会把每个分组的字段值都显示出来。
下面根据 students表中的 sex 字段进行分组查询,使用 GROUP_CONCAT() 函数将 每个分组的 name 字段的值都显示出来:
group by 与聚合函数
在数据统计时,GROUP BY 关键字经常和聚合函数一起使用。 聚合函数包括 COUNT(),SUM(),AVG(),MAX() 和 MIN()。其中,COUNT() 用来统 计记录的条数;SUM() 用来计算字段值的总和;AVG() 用来计算字段值的平均值; MAX() 用来查询字段的最大值;MIN() 用来查询字段的最小值。
下面根据 students 表的 sex 字段进行分组查询,使用 COUNT() 函数计算每一组的 记录数:
group by 与 with rollup
WITH POLLUP 关键字用来在所有记录的最后加上一条记录,这条记录是上面所有记 录的总和,即统计记录数量。
下面根据 students 表中的 sex 字段进行分组查询,并使用 WITH ROLLUP 显示记录 的总和;
group by与having用法
Having子句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,
having和where的区别:
作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组。
WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行。
因此,WHERE 子句不能包含聚集函数; 因为试图用聚集函数判断那些行输入给聚集 运算是没有意义的。 相反,HAVING 子句总是包含聚集函数。(严格说来,你可以 写不使用聚集的 HAVING 子句, 但这样做只是白费劲。同样的条件可以更有效地用 于 WHERE 阶段。)
子查询
子查询指 将一个查询语句嵌套在另一个查询语句中。子查询可以在 SELECT、UPDATE 和 DELETE 语句中使用,而且可以进行多层嵌套。在实际开发时,子查询经常出现在 WHERE 子句中。
IN | NOT IN
当表达式与子查询返回的结果集中的某个值相等时,返回 TRUE,否则返回 FALSE; 若使用关键字 NOT,则返回值正好相反。
EXISTS | NOT EXISTS
用于判断子查询的结果集是否为空,若子查询的结果集不为空,返回 TRUE,否则返 回 FALSE;若使用关键字 NOT,则返回的值正好相反。
也就是若exists后面的语句执行成功则执行where之前的语句;若不成功则不执行,也就是查不到是个空表;
exists
not exists