MySQL的登陆
- 使用MySQL自带的客户端
使用这种方式只适合root用户,不够灵活 - 使用cmd命令窗登录
mysql -h主机名 -P端口号 -u用户名 -p密码
如果是本机登录,则可以省略-h主机名 -P端口号
假如我想登录一个本机mysql数据库,用户名为root,密码为data
打开cmd命令窗,输入命令:
mysql -u root -pdata
注意-p后边直接输入密码时,-p与密码之间不能有空格。如果感觉直接输入密码不安全,可以只输入
mysql -u root -p
接着按下回车,此时就会出现一行
此时输入密码是对外不显示的。
MySQL常见命令
- 查询MySQL版本:
mysql --version;
或者mysql --V;
- 查询当前都有哪些数据库:
show databases;
- 进入指定的数据库(进入一个名字为test的数据库):
use test;
- 查询当前数据库中都有哪些表:
show tables;
- 当前正在访问数据库test1,但是想查询数据库test2中都有哪些表:
show tables from test2;
,此时并没有切换到test2库里边,仍在访问test1库。 - 查询当前所在数据库名称:
select database();
- 查看表的结构:
desc 表名;
- 查询表中的数据:
select * from 表名;
对表的修改等语句在随后的blog中总结。
SQL语法规范
- 不区分大小写,但是建议关键字大写,表名、列名小写。
- 每条命令最好用分号结尾。
- 每条命令根据长度,可以缩进和换行。
- 注释:
单行注释:#注释文字
单行注释:-- 注释文字(注意,- -和注释文字之间一定要有空格)
多行注释:/* 注释文字*/
SQL语言
SQL语言是关系数据库的标准语言,是数据库领域中一个主流语言,它主要由四部分组成,分别是:DQL(数据查询语言),DML(数据操纵语言),DDL(数据定义语言)和DCL(数据控制语言)。
DQL语言的学习
#基础查询
select 查询列表 from 表名
特点:
1.查询列表可以是:表中的字段、常量值、表达式、函数
2.查询的结果是一个虚拟的表格。
- 查询表中单个字段:
select 字段名称 from 表名;
- 查询表中多个字段:
select 字段1,字段2,字段3,... from 表名;
- 查询表中的所有字段:
select * from 表名;
查询语句这里有个小细节:
假如我们要从表student中选出age字段,我们可以:
select age from student;
但是我们会发现有的地方代码会出现这种情况:
select `age` from student;
这里的
`
符号叫做着重号,一般可以省略不写,但是当你的字段名与关键字重复时,可以用它来区分,比如要从student表中选出name字段:
select name from student;
此时计算机可能会把name当作是关键字,从而出现错误,因此我们可以用着重号用来区分:
select `name` from student;
- 查询常量值:
select 100;
- 查询表达式:
select 100*100;
- 查询函数:
select VERSION();
最后输出的是调用函数之后的返回值。 - 为字段起别名 (as可以省略)
当别名中有特殊字符时,给别名加上引号,建议是双引号。
比如上边查询的100*100,可以写作select 100*100 as 结果;
再比如,在学生表中有姓名和性别两个字段,我们查询这两个字段:select 姓名, 性别 from 学生;
结果是: - 我们可以给字段姓名换做name,性别换做gender,
select 姓名 as name, 性别 as gender from 学生;
结果是: - 去重
select distinct 字段 from 表名;
比如我从表学生
中选取其中的学院代号
:select 学院号 from 学生;
- 我们可以看到结果中有多少学生就会有多少条记录,其中有好多学院好重复出现,我们就可以用去重,把代码改为:
select distinct 学院代号 from 学生
。 - +号的作用
SQL语言中的 ‘+’ 号仅仅是个运算符,不能用于拼接字符串。
1.当两个操作数都为数值型,做加法运算。
2.其中一方是字符型,则尝试把字符型转化为数值型。若转化成功,做加法运算,若失败,则把字符型转化为0。
3.当其中一方是null,则结果为null。
- concat链接字段。
如果想把多个字段内容连起来,作为一个字段输出,则就要用到concat函数。比如:select concat(姓名,性别) as 结果 from 学生;
- ifnull函数
select ifnull(expr1, expr2) from 表名;
从表中选expr1的值,如果expr1的值为null,就把值替换为expr2的值。
#条件查询
select 查询列表 from 表名 where 筛选条件;
分类:
- 按条件表达式筛选:
条件运算符:>, <, =, !=, <>(也是不等), >=, <= - 按逻辑表达式筛选
逻辑运算符(用于连接条件表达式): &&, ||, !, and, or, not - 模糊查询
like, between and, in, is null, is not null
1.按条件表达式查询:
查询年龄大于18岁的学生信息:select * from 学生 where age>18;
按逻辑表达式筛选:
查询年龄在18到22之间的学生的学生姓名:select name from 学生 where age>=18 and age<=22;
2.模糊查询:
like
查询姓张的学生信息:select * from 学生 where 姓名 like '张%';
between and (包含区间两侧)
查询学号在T02和T07之间的学生的信息:select * from 学生 where 学号 between 'T02' and 'T07';
in (in列表中的值必须为同一类型或兼容),in不能使用通配符。
查询学院代码为100或200的学生名称:select 姓名 from 学生 where 学院代码 in ('100','200');
注意:字符型的值要用‘’标起来,模糊查询通常与通配符连一块使用,比如‘a%’
表示以a开头,'%a%'
表示字符串中包含a,'%a'
表示以a结尾。
通配符:
%代表任意多个字符,包含0个字符。
_表示任意单个字符。
如果查询的关键词和通配符一样,比如,查找名字第二个字为_的学生名,就要使用转义:select 姓名 from 学生 where 姓名 like '_\_%';
或者指定转义字符,比如我们设定@为转义字符,就可以改为select 姓名 from 学生 where 姓名 like '_@_%' escape '@';
补充:安全等于 <=>
<=>既可以判断null值,又可以判断普通数值。
#排序查询
select 查询列表 from 表 [Where 筛选条件] order by 排序列表[asc/desc]
asc代表升序,desc代表降序,默认asc。
order by子句可以支持单个字段、多个字段、表达式、函数、别名,一般放在查询语句最后边(limit子句除外)
查询课程名,学时,按照学时升序排序:
select 课程名,学时 from 课程 order by 学时 asc;