20201014李权

mysql

什么是数据库?

数据库是按照一定的形式来组织,存储数据,目的是为了操作数据的增删改查

数据的几种类型:

1.网状数据库

2.层次性数据库

3.关系型数据库

4.非关系型数据库

关系型数据库的逻辑关系:

server(数据库服务器)/database(数据库)/table(数据表)/row行/column列

mysql的常用管理命令:

如果数据库运行的同一台计算机上登陆可以省略主机

连接数据库 mysql -uroot -p

2.如果服务器是在你登陆的计算机以外的计算机上运行,则还需要指定主机名,与管理员联系,了解使用那些连接参数进行连接(即可使用主机,用户名和密码)一旦我们知道正确的参数,可以这样连接:ipconfig 查询主机名

当然得先让数据库服务器开通权限:

grant select,delete,update,insert on abc.* to 'root'@'192.168.1.2' identified by 'root';

(abc是数据库,root是用户名,密码)

mysql -h host -u user -p Enter password:
  1. 要求服务器告诉您其版本号和当前日期
SELECT VERSION(), CURRENT_DATE;

mysql显示返回的行数以及查询执行所用的时间,这为您提供了服务器性能的粗略了解。这些值不精确,因为它们表示挂钟时间(不是 CPU 或计算机时间),并且它们受服务器负载和网络延迟等因素影响。

4.若要验证表的创建方式是否以预期方式创建,请使用DESCRIBE table表名;

5.**distinct** 修饰列,查询不重复的行数据

 use chenge;  CREATE TABLE empName empid int PRIMARY key auto_increment,  ename VARCHAR(20),  hobby VARCHAR(20) );  CREATE TABLE emp(  eid int PRIMARY key auto_increment,  sex TINYINT,  empid int,  FOREIGN key(empid) REFERENCES empName(empid)  ); desc emp;
INSERT into empName VALUES (100,'老大','吃饭'),(101,'老二','睡觉'),  (102,'老三','打飞机'); insert INTO emp VALUES (null,1,100), (null,0,101), (null,1,102); #简单的查询语句 SELECT * from emp; SELECT * from empname; #查询特定的列 select ename FROM empname; #查找特定的多列,以逗号隔开 #SELECT ename,empid FROM empname; #给列起别名 SELECT ename as '姓名' from empname; 

show database:显示数据库

use 数据库名;//使用数据库

show tables;展示数据表

desc 表名:显示表的结构

quit:退出程序

sql的语法规范:

1.每条代码的指令后面必须以英文字母的分号结尾

2.假如一条命令出现了语法错误,则后面的代码不会执行

3.单行注释以 #,多行注释以/**/

sql的命令分类:

DDL:定义数据

1.create创建数据库和表

create database 数据库名 charset=utf8; //如果不设置字符编码可能会导致中文乱码,默认是Latin-1编码 create table 表名();创建数据表

2.drop删除

drop database if exists 数据库名

DML:操作数据

insert:插入数据 insert into student values(...)update :改变数据 update student set sex='..',score='..' where='' delete:删除 delete from student where name='..'

DQL:查询语句

select:查询语句 select * from student

DCL:控制用户权限

grant:授权 revoke:收回权限

1.创建数据库的语句:

create databases 数据库名 charset = utf8;

2.删除数据库

drop database if exists 数据库名

查询数据:

简单查询:

1.查询特定的列

select name from student; name:是列 student:是表

2.查询所有的列

select * from student

3.给列起别名 用as

select name as '姓名' from student

4.合并相同的项 distinct,就是把重复的值不会重复出现

select distinct name from student;

意思就是name列中不会出现重复的值

5.查询时计算

select salary*12 from student;

6.结果集的排序 order by 有两个关键字 asc正序,desc降序

select * from student order by salary asc; salary工资从低到高 select * from student order by salary desc salary由高到低

6.条件查询 where

select * from student where salary>2000

7.模糊条件查询 %% %_ %:代表一个或多个 _代表0个或一个

select * from student where name ='%权%'

8.分页查询 limit m,n

m:代表从第几条开始查询

n:代表查询几条数据

分页查询

select * from student where name ='%权%'

复杂查询:

聚合查询:

聚合查询

1.select count(score) from student 查询该列有多少项 2.select sum(score) from student 查询该列的总数之和 3.select avg(score) from student 查询该列的平均数 4.select max(score) from student 查询score的最大分 5.select min(score) from student 查询score的最小分 6.select year(birthday) from student 查询年份数值 7.select month(birthday) from student 查询月份

分组查询:

group by

select AVG(eid),sum(cNumber)FROM emp GROUP BY eNumber;

注意:分组查询只能查询聚合函数和分组条件

子查询:

子查询是select另一条语句中的一条语句。

支持sql标准要求的所有子查询形式和操做,以及一些特定mysql的功能

select * from empname where eNumber = (SELECT eNumber from emp WHERE eid=1);

在此实例中 select * from empname是外部查询,(SELECT eNumber from emp WHERE eid=1);),我们说是子查询嵌套在外部查询中,实际上,有可能将子查询嵌套在其他子查询中相当的深度,注意:子查询必须包含在括号里

多表查询(跨表查询)

内连接

select * from student inner join school on vsNumber = sNumber; student:是外键的表 school:是主键表 inner join :链接的意思 on后面跟着的外键和主键相同的一列 返回左表和右表所对应的两个表的全部内容

左连接

select * from student left join school on vsnumber = sNumber;

和内连接同理,唯一不同的是,返回左表的全部内容,返回右表和左表对应的内容

右连接

select * from student right join school on vsNumber = sNumber 和左连接一样的,唯一不同返回右表的全部内容,返回左表和右表对应的内容
select * from student right join school on vsNumber = sNumber 和左连接一样的,唯一不同返回右表的全部内容,返回左表和右表对应的内容

*union all不合并相同的项*

标签

评论