当前位置:   article > 正文

Mysql(Linux数据库或者在Navicate中)_linux mysql navicat

linux mysql navicat

Mysql数据库组成

服务端:主要存储数据,并接收用户发过来的SQL语句,并执行结果返回给客户端

客户端:下发用户要执行的sql语句,并显示服务器返回的执行结果

命令行数据库连接方式

mysql -h 数据库 IP -P 端口号 -u 数据库登录用户名 -p 数据库登录密码
-h不加表示为本机,-P不加表示默认3306端口

数据类型

数字类型

 字符串类型

时间和日期类型

约束

命令行操作数据库、表

查看所有的数据库        show        database;

使用数据库        

use 数据库名;
查看当前使用的数据库select database();
创建数据库create database 数据库名 charset=utf8;
删除数据库drop database 数据库名;
查看数据库所有的表show tables;
查看数据库表的结构desc 表名;(desc =describe)
查看数据表的创建语句show create table 表名;

数据库表操作

1.创建数据库表

语法:

create table表名(

        字段名1 类型 约束,

        字段名2 类型 约束

        ... ... ...

)

例子:

创建一个学生表,字段要求:姓名(长度为10),年龄,身高(保留2位小数)

  1. CREATE table students(
  2. id int UNSIGNED PRIMARY KEY auto_increment,
  3. name VARCHAR(20),
  4. height decimal(5,2)
  5. )

2.删除数据库表

drop table 表名        (该命令将永久性删除表和其所有数据)

drop table if exists students (删除表之前检查表是否存在。如果表存在,则表会被删除;如果表不存在,则不会引发错误)

数据增删改查操作

增(insert):

1.1增加一行数据

insert into 表名 values(...)

例子:

insert into students values(0,'jingbeng',12.66);

//主键自增长可以用0或者NULL代替

另一种写法:

insert into students(name) values('nnn')

1.2增加多行数据

方式一:写多条insert语句,多条语句之间用";"隔开

insert into students(name) value ('jingbeng1');

insert into students(name) value ('jingbeng3');

insert into students values(0,'jingbeng2',23,167.56)

方式二: 通过一条insert语句插入多条数据,数据间用","分隔

格式一: insert into 表名 values (...), (...) ...

例: insert into students values(0,'亚瑟3',23,167.56),(0,'亚瑟4',23,167.56)

格式二: insert into 表名(字段名1,...) value(值1,...),(值1,...)...

例: insert into students(name) value ('老夫子5'),('老夫子6')

2.查(select):

1.1简单查询

select * from 表名;

例子:select * from students;

1.2查询部分字段数据

select 字段1,字段2... from 表名;

例子:select name,sex,age from students;

1.3起别名

表起别名:select 别名.字段1,别名.字段2... from 表名 as 别名;

例子:select s.name,s.age from students as s;

字段起别名:select 字段1 as 别名1,字段2 as 别名 from 表名

例子:select name as n,age as a from students;

1.4字段内容去重

select distinct 字段 from 表名;

1.5条件查询(where)

select 字段1,字段2... from 表名 where 条件;

例: select * from students where id=1;

说明: where支持多种运算符进行条件处理

比较运算

逻辑运算

模糊查询

范围查询

空判断

1.5.1条件查询-比较运算符

例1:查询小乔的年龄

select age from students where name='小乔’

例2:查询20岁以下的学生

select * from students where age<20

例3:查询家乡不在北京的学生

select * from students where hometown!='北京'

1.5.2条件查询-逻辑运算符

例1:查询年龄小于20的女同学

select * from students where age<20 and sex='女'

例2:查询女学生或'1班'的学生

select * from students where sex='女' or class='1班

例3:查询非天津的学生

select * from students where not hometown='天津'

1.5.3条件查询-模糊查询

关键字: like

% :匹配任意多个字符

- : 匹配一个任意字符

例1:查询姓孙的学生

select * from students where name like '孙%'

例2:查询姓孙且名字是一个字的学生

select * from students where name like '孙_'

例3:查询姓名以‘乔’结尾的学生

select * from students where name like '%乔'

例4:查询姓名中包含‘白’的学生

select * from students where name like '%白%'

1.5.4条件查询-范围查询

in表示在一个非连续的范围内

例:查询家乡是北京或上海或广东的学生

select * from students where hometown in('北京','上海','广东')

between ... and ...表示在一个连续的范围内

例:查询年龄为18至20的学生

select * from students where age between 18 and 20

1.5.5条件查询-空判断

注意:Mysql中空表示null,与 ‘’ (空)是不一样的。

判断为: is null

例:查询没有填写身份证的学生

select * from students where card is null

判断非空: is not null

例:查询填写了身份证的学生

select * from students where card is not null

1.6排序(降序需要加desc)

1 :查询所有学生信息,按年龄从小到大排序
select * from students order by age;
2 :查询所有学生信息,按年龄从大到小排序,年龄相同时,再按学号从小到大排序
select * from students order by age desc,studentNo;

1.7聚合函数

使用聚合函数是为了方便进行数据进行统计

聚合函数不能在where中使用:

count():查询总记录数

max(字段名):查询最大值

min(字段名):查询最小值

sum(字段名):求和

avg(字段名):求平均数

1.8分组(group by)

按照字段分组,此字段相同的数据会被放到一个组中 .分组的目的是对每一组的数据进行统计( 使用聚合函数 )
语法:select 字段1,字段2,聚合函数... from 表名 group by 字段1,字段2...

1.9分组后的筛选(having...)

语法: select 字段1,字段2,聚合... from 表名 group by 字段1,字段2,字段3...having 条件
ps: 关键字 having 后面的条件运算符与 where 的相同
1 :查询男生总人数
方案一 :select count(*) from students where sex=' '
方案二 :select sex,count(*) from students group by sex having sex=' '
having和where的对比:

where 是对 from 后面指定的表进行数据筛选,属于对原始数据的筛选。

having 是对 group by 的结果进行筛选。

having 后面的条件中可以用聚合函数,where后面不可以。

1.10分页-获取部分数据

语法:select * from 表名 limit start count

start表示开始位置,索引默认从0开始

count表示从start位置开始获取count条数据

例子:获取学生表的第2-4行的信息

select * from students limit 1,3;

1.10.1分页显示

分页查询:select * from students limit (n-1)*m,m

说明:n表示显示第几页的数据;m表示每页显示多少条数据

1.11连接查询

内连接(inner join...on...)

语法:

select * from 表1 inner join 表2 on 表1.列=表2.列;

select * from 表1,表2 where 表1.列=表2,列;

1 :查询学生信息及学生的成绩
方式一 : Select * from students stu inner join scores sc on stu.studentNo = sc.studentNo
方式二 :select * from students stu, scores sc where stu.studentNo = sc.studentNo
2 :查询课程信息及课程的成绩
select * from courses cs inner join scores sc on cs.courseNo = sc.courseNo
3 :查询王昭君的成绩,要求显示姓名、课程号、成绩
select stu.name, sc.courseNo, sc.score from students stu
inner join scores sc on stu.studentNo = sc.studentNo where
4: 查询学生信息及学生的课程对应的成绩
SELECT * FROM students stu INNER JOIN scores sc on stu.studentNo=sc.studentno INNER JOIN  courses cs on sc.courseNo=cs.courseNo;
5: 查询王昭君的数据库成绩,要求显示姓名、课程名、成绩
SELECT stu. name ,cs. name ,sc.score FROM students stu INNER JOIN scores sc on
stu.studentNo=sc.studentno INNER JOIN courses cs on sc.courseNo=cs.courseNo WHERE
stu. name =' 王昭君 ' and cs. name =' 数据库 ';
6: 查询男生中最高成绩,要求显示姓名、课程名、成绩
SELECT stu.NAME,sc.score,cs.NAME FROM students stu INNER JOIN scores sc on
stu.studentNo=sc.studentno INNER JOIN courses cs on cs.courseNo=sc.courseNo
WHERE stu.sex=' '
ORDER BY sc.score DESC
LIMIT 0,1;
左连接(left join...on...)

定义:(右连接反之)

  • 左连接是从左表(左侧的表)中选择所有的行,并包括符合连接条件的右表(右侧的表)中的匹配行。
  • 如果左表的某一行在右表中没有匹配的行,那么结果集中将会显示右表中对应列的值为 NULL。
  • 结果集中将包含左表中的所有行,而右表中不符合连接条件的行将被排除

语法:select * from 表1 left join 表2 on 表1.列=表2.列

1: 查询所有学生的成绩,包括没有成绩的学生
select * from students stu
left join scores sc on stu.studentNo = sc.studentNo 2: 查询所有学生的成绩,包括没有成绩的学生,需要显示课程名
select * from students stu
left join scores sc on stu.studentNo = sc.studentNo
left join courses cs on cs.courseNo = sc.courseNo
右连接
语法 : select * from 表 1 right join 表 2 on 1. = 2.
1: 查询所有学生的成绩,包括没有成绩的学生
select * from scores sc
right join students stu on stu.studentNo = sc.studentNo
2: 查询所有学生的成绩,包括没有成绩的学生,需要显示课程名
select * from scores sc
right join courses cs on cs.courseNo = sc.courseNo
right join students stu on stu.studentNo = sc.studentNo
ps:左右连接中谁左(右)哪个最长的表就放在左(右)边

1.14子查询

充当条件

1 :查询王昭君的成绩,要求显示成绩(标量子查询)
select * from scores where studentNo = ( select studentNo from students where name = ' 王昭君 ' )
例2:查询 18 岁的学生的成绩,要求显示成绩(列子查询)
select * from scores where studentNo in ( select studentNo from students where age= 18 )
例3:查询和王昭君同班、同龄的学生信息(行子查询)
select * from students where ( class ,age)=( select class ,age from students where name = ' 王昭君 ' )
充当数据源
例1:查询数据库和系统测试的课程成绩
Select * from scores s inner join ( select * from courses where name in ( ' 数据库
' , ' 系统测试 ' )) c on s.courseNo = c.courseNo

改(update)

语法:update 表名 set 字段名1=新值1,字段名2=新值2....where 条件
: 修改 id 5 的学生数据,姓名改为 狄仁杰,年龄改为 20
update students set name=' 狄仁杰 ',age=20 where id=5

删(delete)

语法:delete from 表名 where 条件;

: 删除 id 6 的学生数据
delete from students where id=6
注意 : 此方法为物理删除,工作中大部分使用逻辑删除。
逻辑删除是指通过设定一个字段来标识当前记录已经删除。
is_delete 字段来标识, 1 代表删除, 0 表示未删除。
ps:delete 删除所有数据时,自增长字段不会从 1 开始

删除数据其他方式(truncate/drop)

truncate table 表名
: 删除学生表的所有数据 ( 保留表结构 )
truncate table students
drop table 表名
删除学生表 ( 包括所有数据和表结构 )
drop table students
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/475554
推荐阅读
相关标签
  

闽ICP备14008679号