个人主页:wei_shuo的个人主页
Hello World !
mysql是mysqlAB公司的
mysqlAB公司被sun公司收购了
sun公司又被Oracle公式收购了
mysql现在是由oracle公司负责维护
Oracle是收费的,mysql是免费的
在行尾:Shift+Home键选中当前行。
在行尾:Ctrl+Shift+Home键 从光标处一直选中文本开头
在行首:Shift+End键选中当前行。
在行首:Shift+End键 从光标处一直选中文本末尾
运行已选择的:Ctrl+Shift+R。
复制当前行:Ctrl+D。
Ctrl+q 打开查询窗口
Ctrl+/ 注释MySQL语句
ctrl+shift +/ 解除注释
ctrl+r 运行查询窗口的sql语句
ctrl+shift+r 只运行选中的sql语句
F6 打开一个mysql命令行窗口
ctrl+l 删除一行
ctrl+n 打开一个新的查询窗口
ctrl+w 关闭一个查询窗口
数据查询语言,凡是带select关键字的都是查询语句都是DLQ
select 字段名 from 表名
#查看kc表中的所有数据
mysql> select * from kc;
+--------+--------------+----------+------+
| 课程号 | 课程名 | 开课学期 | 学分 |
+--------+--------------+----------+------+
| 101 | 计算机基础 | 1 | 3 |
| 102 | c语言 | 1 | 3 |
| 206 | 高等数学 | 3 | 3 |
| 208 | 数据结构 | 5 | 6 |
| 209 | 操作系统 | 6 | 3 |
| 210 | 计算机组装 | 4 | 4 |
| 212 | ORACLE数据库 | 2 | 5 |
| 301 | 计算机网络 | 1 | 4 |
| 302 | 软件工程 | 7 | 2 |
+--------+--------------+----------+------+
9 rows in set (0.01 sec)
#distinct消除重复数据
mysql> select distinct(学分) from kc;
+------+
| 学分 |
+------+
| 3 |
| 6 |
| 4 |
| 5 |
| 2 |
+------+
5 rows in set (0.00 sec)
# 查询多个字段
mysql> select 课程号,课程名 from kc;
+--------+--------------+
| 课程号 | 课程名 |
+--------+--------------+
| 102 | c语言 |
| 212 | ORACLE数据库 |
| 209 | 操作系统 |
| 208 | 数据结构 |
| 101 | 计算机基础 |
| 210 | 计算机组装 |
| 301 | 计算机网络 |
| 302 | 软件工程 |
| 206 | 高等数学 |
+--------+--------------+
9 rows in set (0.00 sec)
#列起别名
mysql> select 课程号 as jkj from kc;
+-----+
| jkj |
+-----+
| 102 |
| 212 |
| 209 |
| 208 |
| 101 |
| 210 |
| 301 |
| 302 |
| 206 |
+-----+
9 rows in set (0.00 sec)
mysql> select 课程号 as 'jkj hkh' from kc;
+---------+
| jkj hkh |
+---------+
| 102 |
| 212 |
| 209 |
| 208 |
| 101 |
| 210 |
| 301 |
| 302 |
| 206 |
+---------+
9 rows in set (0.00 sec)
#注意:
#as可省略
#双引号不标准,在mysql中可用,在Oracle中不可用
#单引号标准,都可用
#列参与数学运算
mysql> select 课程名 课程,学分*18 分数 from kc;
+--------------+------+
| 课程 | 分数 |
+--------------+------+
| 计算机基础 | 54 |
| c语言 | 54 |
| 高等数学 | 54 |
| 数据结构 | 108 |
| 操作系统 | 54 |
| 计算机组装 | 72 |
| ORACLE数据库 | 90 |
| 计算机网络 | 72 |
| 软件工程 | 36 |
+--------------+------+
9 rows in set (0.00 sec)
#根据生日求年龄
select 姓名,year(now())-year(出生日期) as 年龄 from 信息管理学生表;
= 等于
><或!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
between……and……两个值之间,等同于 >= and <=
is null 为null(is not null 不为空)
and或&& 并且
or或|| 或
in 包含,相当于多个or(not in 不在这个范围中)
not 取非,(主要用在is或in中)
any 满足子条件查询的任意一条件
all 满足子条件查询的所有条件
#eg:
mysql> select * from kc;
+--------+--------------+----------+------+
| 课程号 | 课程名 | 开课学期 | 学分 |
+--------+--------------+----------+------+
| 101 | 计算机基础 | 1 | 3 |
| 102 | c语言 | 1 | 3 |
| 206 | 高等数学 | 3 | 3 |
| 208 | 数据结构 | 5 | 6 |
| 209 | 操作系统 | 6 | 3 |
| 210 | 计算机组装 | 4 | 4 |
| 212 | ORACLE数据库 | 2 | 5 |
| 301 | 计算机网络 | 1 | 4 |
| 302 | 软件工程 | 7 | 2 |
+--------+--------------+----------+------+
9 rows in set (0.00 sec)
mysql> select * from kc where 学分 != 3;
+--------+--------------+----------+------+
| 课程号 | 课程名 | 开课学期 | 学分 |
+--------+--------------+----------+------+
| 208 | 数据结构 | 5 | 6 |
| 210 | 计算机组装 | 4 | 4 |
| 212 | ORACLE数据库 | 2 | 5 |
| 301 | 计算机网络 | 1 | 4 |
| 302 | 软件工程 | 7 | 2 |
+--------+--------------+----------+------+
5 rows in set (0.00 sec)
like 模糊查询,支持%或下划线匹配
%匹配任意个字符
一个_只能匹配一个字符
#找出课程号中含有1的
mysql> select * from kc where 课程号 like '%1%';
+--------+--------------+----------+------+
| 课程号 | 课程名 | 开课学期 | 学分 |
+--------+--------------+----------+------+
| 101 | 计算机基础 | 1 | 3 |
| 102 | c语言 | 1 | 3 |
| 210 | 计算机组装 | 4 | 4 |
| 212 | ORACLE数据库 | 2 | 5 |
| 301 | 计算机网络 | 1 | 4 |
+--------+--------------+----------+------+
5 rows in set (0.00 sec)
#找出课程号开头为1的
mysql> select * from kc where 课程号 like '1%';
+--------+------------+----------+------+
| 课程号 | 课程名 | 开课学期 | 学分 |
+--------+------------+----------+------+
| 101 | 计算机基础 | 1 | 3 |
| 102 | c语言 | 1 | 3 |
+--------+------------+----------+------+
2 rows in set (0.01 sec)
#找出课程号结尾为1的
mysql> select * from kc where 课程号 like '%1';
+--------+------------+----------+------+
| 课程号 | 课程名 | 开课学期 | 学分 |
+--------+------------+----------+------+
| 101 | 计算机基础 | 1 | 3 |
| 301 | 计算机网络 | 1 | 4 |
+--------+------------+----------+------+
2 rows in set (0.00 sec)
#找出课程名第三个为机的
mysql> select * from kc where 课程名 like '__机%';
+--------+------------+----------+------+
| 课程号 | 课程名 | 开课学期 | 学分 |
+--------+------------+----------+------+
| 101 | 计算机基础 | 1 | 3 |
| 210 | 计算机组装 | 4 | 4 |
| 301 | 计算机网络 | 1 | 4 |
+--------+------------+----------+------+
3 rows in set (0.00 sec)
group by
#查找xs表中各专业男生的人数
mysql> select 专业名,count(性别) as 男生人数 from xs where 性别='男' group by 专业名 ;
+----------+----------+
| 专业名 | 男生人数 |
+----------+----------+
| 软件技术 | 8 |
| 网络技术 | 3 |
| 信息管理 | 1 |
| 建筑智能 | 1 |
+----------+----------+
4 rows in set (0.00 sec)
#为什么分组函数不能直接使用在where后面?
mysql> select 分数 from cj where 分数>max(分数);
ERROR 1054 (42S22): Unknown column '分数' in 'field list' //报错
因为分组函数在使用时必须分组之后才能使用,where执行的时候还没有分组,所以where之后不能用分组函数
#查询前三条数据记录
mysql> select * from xs limit 3;
+--------+--------+----------+------+------------+--------+------+
| 学号 | 姓名 | 专业名 | 性别 | 出生日期 | 总学分 | 备注 |
+--------+--------+----------+------+------------+--------+------+
| 001101 | 王金华 | 软件技术 | 男 | 1990-02-10 | NULL | NULL |
| 001102 | 程周杰 | 软件技术 | 男 | 1991-02-01 | NULL | NULL |
| 001103 | 王元 | 软件技术 | 男 | 1989-10-06 | NULL | NULL |
+--------+--------+----------+------+------------+--------+------+
3 rows in set (0.01 sec)
#查询第四条数据记录
mysql> select * from xs limit 3,1;
+--------+--------+----------+------+------------+--------+------+
| 学号 | 姓名 | 专业名 | 性别 | 出生日期 | 总学分 | 备注 |
+--------+--------+----------+------+------------+--------+------+
| 001104 | 严蔚敏 | 信息管理 | 女 | 1990-08-26 | NULL | NULL |
+--------+--------+----------+------+------------+--------+------+
1 row in set (0.00 sec)
#查询最高分学生的详细信息
mysql> select distinct cj.学号,姓名,成绩 from xs,cj where cj.学号=xs.学号 and 成绩 = (select max(成绩) from cj) order by 成绩 desc;
+--------+--------+------+
| 学号 | 姓名 | 成绩 |
+--------+--------+------+
| 001110 | 张晓晖 | 95.0 |
+--------+--------+------+
1 row in set (0.00 sec)
#查询及格学生的详细信息
mysql> select distinct 姓名 as 及格学生的姓名,课程号,成绩 from xs,cj where cj.学号=xs.学号 && 成绩 in (select 成绩 from cj where 成绩 >= 60) order by 成绩 desc;
+----------------+--------+------+
| 及格学生的姓名 | 课程号 | 成绩 |
+----------------+--------+------+
| 张晓晖 | 101 | 95.0 |
| 张晓晖 | 102 | 95.0 |
| 李明 | 101 | 85.0 |
| 严蔚敏 | 102 | 84.0 |
| 张飞 | 102 | 83.0 |
| 王元 | 206 | 81.0 |
| 李伟 | 206 | 80.0 |
| 刘超 | 102 | 80.0 |
| 马妮啦 | 102 | 79.0 |
| 王金华 | 102 | 78.0 |
| 程周杰 | 102 | 78.0 |
| 程周杰 | 206 | 78.0 |
| 刘超 | 101 | 78.0 |
| 王金华 | 206 | 76.0 |
| 李长江 | 206 | 76.0 |
| 李伟 | 102 | 71.0 |
| 王元 | 102 | 70.0 |
| 张飞 | 206 | 70.0 |
| 刘超 | 206 | 68.0 |
| 张飞 | 101 | 66.0 |
| 严蔚敏 | 101 | 65.0 |
| 严蔚敏 | 206 | 65.0 |
| 李伟 | 101 | 65.0 |
| 李明 | 102 | 64.0 |
| 刘敏 | 101 | 63.0 |
| 王元 | 101 | 62.0 |
| 王金华 | 101 | 61.0 |
| 李天飞 | 206 | 60.0 |
+----------------+--------+------+
28 rows in set, 1 warning (0.00 sec)
mysql> create table rom414 like xs;
Query OK, 0 rows affected (0.03 sec)
mysql> insert into rom414 select * from xs limit 20,4;
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from rom414;
+--------+--------+--------+------+------------+--------+------+
| 学号 | 姓名 | 专业名 | 性别 | 出生日期 | 总学分 | 备注 |
+--------+--------+--------+------+------------+--------+------+
| 200308 | 郑明鑫 | NULL | 男 | 2003-04-05 | NULL | NULL |
| 200326 | 唐辉阳 | NULL | 男 | 2003-02-06 | NULL | NULL |
| 200327 | 徐斌 | NULL | 男 | 2003-03-05 | NULL | NULL |
| 200336 | 李昌城 | NULL | 男 | 2003-06-03 | NULL | NULL |
+--------+--------+--------+------+------------+--------+------+
4 rows in set (0.00 sec)
#在成绩表中把学C语言的学生成绩全部加5
mysql> update cj set 成绩=成绩+5 where 课程号 = (select 课程号 from kc where 课程名 = 'c语言');
Query OK, 10 rows affected (0.01 sec)
Rows matched: 10 Changed: 10 Warnings: 0
#根据生日求年龄并写入到表格
update 信息管理学生表 set 年龄 = year(now())-year(出生日期);
#在成绩表中删除张飞c语言的成绩
mysql> delete from cj where 学号 = (select 学号 from xs where 姓名='张飞') && 课程号 = (select 课程号 from kc where 课程名 = 'c语言');
Query OK, 1 row affected, 1 warning (0.01 sec)
#查询kc表,以学分为升序排序
mysql> select * from kc order by 学分 asc; //默认是升序
+--------+--------------+----------+------+
| 课程号 | 课程名 | 开课学期 | 学分 |
+--------+--------------+----------+------+
| 302 | 软件工程 | 7 | 2 |
| 101 | 计算机基础 | 1 | 3 |
| 102 | c语言 | 1 | 3 |
| 206 | 高等数学 | 3 | 3 |
| 209 | 操作系统 | 6 | 3 |
| 210 | 计算机组装 | 4 | 4 |
| 301 | 计算机网络 | 1 | 4 |
| 212 | ORACLE数据库 | 2 | 5 |
| 208 | 数据结构 | 5 | 6 |
+--------+--------------+----------+------+
9 rows in set (0.00 sec)
#查询kc表,以学分为降序排序
mysql> select * from kc order by 学分 desc;
+--------+--------------+----------+------+
| 课程号 | 课程名 | 开课学期 | 学分 |
+--------+--------------+----------+------+
| 208 | 数据结构 | 5 | 6 |
| 212 | ORACLE数据库 | 2 | 5 |
| 210 | 计算机组装 | 4 | 4 |
| 301 | 计算机网络 | 1 | 4 |
| 101 | 计算机基础 | 1 | 3 |
| 102 | c语言 | 1 | 3 |
| 206 | 高等数学 | 3 | 3 |
| 209 | 操作系统 | 6 | 3 |
| 302 | 软件工程 | 7 | 2 |
+--------+--------------+----------+------+
9 rows in set (0.00 sec)
#多个字段排序
要求查询课程名和学分,学分按升序排序,如果学分相同,就按课程名以升序排序
mysql> select 课程名,学分 from kc order by 学分,课程名;
+--------------+------+
| 课程名 | 学分 |
+--------------+------+
| 软件工程 | 2 |
| c语言 | 3 |
| 操作系统 | 3 |
| 计算机基础 | 3 |
| 高等数学 | 3 |
| 计算机组装 | 4 |
| 计算机网络 | 4 |
| ORACLE数据库 | 5 |
| 数据结构 | 6 |
+--------------+------+
9 rows in set (0.00 sec)
mysql> select 课程名,学分 from kc order by 2;//这里的2表示第二列,不建议这样写
+--------------+------+
| 课程名 | 学分 |
+--------------+------+
| 软件工程 | 2 |
| 计算机基础 | 3 |
| c语言 | 3 |
| 高等数学 | 3 |
| 操作系统 | 3 |
| 计算机组装 | 4 |
| 计算机网络 | 4 |
| ORACLE数据库 | 5 |
| 数据结构 | 6 |
+--------------+------+
9 rows in set (0.00 sec)
#找出学分在3到5之间的数据按学分降序进行排列
mysql> select * from kc where 学分 between 3 and 5 order by 学分 desc;
+--------+--------------+----------+------+
| 课程号 | 课程名 | 开课学期 | 学分 |
+--------+--------------+----------+------+
| 212 | ORACLE数据库 | 2 | 5 |
| 210 | 计算机组装 | 4 | 4 |
| 301 | 计算机网络 | 1 | 4 |
| 101 | 计算机基础 | 1 | 3 |
| 102 | c语言 | 1 | 3 |
| 206 | 高等数学 | 3 | 3 |
| 209 | 操作系统 | 6 | 3 |
+--------+--------------+----------+------+
7 rows in set (0.00 sec)
mysql> select database();
+------------+
| database() |
+------------+
| cjgl1 |
+------------+
1 row in set (0.00 sec)
语句执行顺序:
第一步:from
第二步:where
第三步:group by
第四步:select
第五步:order by(排序总是最后执行)
#不查看表中的数据,只查看结构
mysql> desc kc;
+----------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+-------+
| 课程号 | char(3) | NO | PRI | NULL | |
| 课程名 | varchar(20) | NO | UNI | NULL | |
| 开课学期 | tinyint unsigned | NO | | 1 | |
| 学分 | tinyint unsigned | YES | | NULL | |
+----------+------------------+------+-----+---------+-------+
4 rows in set (0.01 sec)