ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql数据库基础操作

2020-06-29 13:01:58  阅读:255  来源: 互联网

标签:ename 数据库 查询 emp student mysql 操作 where Select


目录

 

1.1 数据库发展史

2.1 关系型数据库逻辑结构

3.1 mysql增删改查

3.2 常用SQL语句

3.2.1 创建数据表student详细代码

3.2.2 修改数据

3.2.3 删除数据

3.3.1 解决mysql中文乱码的问题

3.4.1 mysql 中的列类型

3.4.2 列约束

3.5.1 简单查询


1.1 数据库发展史

 网状数据库 和 层次型数据库  -->  关系型数据库  -->  非关系型数据库(NoSQL  处理数据能力更强 MongoDB

2.1 关系型数据库逻辑结构

3.1 mysql增删改查

    show databases;                         /展示所有的数据库/       
    USE 数据库名字;                         /进入指定数据库/
    SHOW TABLES;                        /展示该数据库下所有的表/
    DESC 表名称;                    /描述表中的列/

3.2 常用SQL语句

    DROP DATABASE IF EXISTS csdn;    /丢弃数据库,如果存在数据库csdn/
    
    CREATE DATABASE csdn;            /创建数据库csdn/
    
    USE csdn;                        /进入创建的数据库/

    CREATE TABLE student();          /创建保存数据的表student/

3.2.1 创建数据表student详细代码

/*创建表*/
CREATE TABLE student(                   /创建表名为student的表/
    sid int,                            /创建编号/
    name varchar(8),                    /创建姓名/
    sex varchar(1),                     /创建性别/
    score int                           /创建分数/

);
/*插入表内容*/   
        /注意插入数据的时候严格按照创建数据表的顺序插入数据/

INSERT INTO student VALUES('1','xiaoming','0','80');  /向表名为student中插入第一组数据/
INSERT INTO student VALUES('2','xiaogang','1','95');  /向表名为student中插入第二组数据/
                    /依次类推,往后插入数据。/
/*查询表格内容*/

SELECT * FROM student;              /查询表格为student的内容/

3.2.2 修改数据

/*修改数据*/

UPDATE student SET name ='xiaojun', sex='1' WHERE sid='1';   /修改第一条数据/

3.2.3 删除数据

/*删除数据*/

DELETE FROM student WHERE sid='1';  /删除表名为student中的第一条数据/

3.3.1 解决mysql中文乱码的问题

  1. 脚本文件另存为的编码为UTF8
  2. 客户端连接服务器端的编码为UTF8

           SET NAMES UTF8

      3.服务器端创建数据库使用的编码为UTF8

           CREAT DATABASE xz CHARSET=UTF8

3.4.1 mysql 中的列类型

数值型:可以省略引号

  1. tinyint  (微整形)占一个字节,范围:-128127
  2. smallint  (小整形)占两个字节,范围:-3276832767
  3. int (整型)占四个字节,范围:-21474836482147483647
  4. bigint(大整形)占八个字节,范围超级大

浮点型:可以不加引号

float(单精度浮点型)占四个字节,范围3.4e38,可能产生计算误差

double(双精度浮点型)占八个字节,范围比bigint大得多,可能产生误差

定点小数:decimalM,D M代表总有效位数,D代表小数点后的有效位数

布尔型 Boolean /bool   不加引号

只有两个值,分别是true(真)和false(假),这两个值不能加引号使用的时候会自动转为tinyinttrue变为1false变为0,也可以直接使用10.往往用于存储只有两个结果的数据,例如性别,是否在线,是否为会员

日期时间形:不可省略引号

  1. 日期型:date  2020-12-25
  2. 时间型:time  15:20:30
  3. 日期时间型: datetime 2020-12-25  15:2030

字符串型:必须加引号

  1. VarcharM 变长字符串  操作速度相对慢 M最大65535
  2. CharM定长字符串   M最大255,操作速度相对快,往往存储长度固定的数据,例如身份证号码,手机号码,可能产生空间浪费

3.textM)大型变长字符串,M最大值是2G 

3.4.2 列约束

主键约束——primary key

不允许插入重复的数据,一个表里边只能有一个主键约束。一般加到编号列上,查询的时候会按照编号从小到大显示,就会加快查找速度。声明了主键约束的列上不允许插入NULL

/*主键约束*/
    
    CREATE TABLE student(                /创建表名为student的表/
    sid int PRIMARY KEY,                 /创建编号的列上加入primary key/
    name varchar(8),                    /创建姓名/
    sex varchar(1),                     /创建性别/
    score int                           /创建分数/

);

 

唯一约束——unique

声明了唯一约束的列上不允许插入重复的值,允许插入NULL,而且是多个NULL。

/*唯一约束*/
    CREATE TABLE student(                /创建表名为student的表/
    sid int PRIMARY KEY,                 /创建编号    列上加入primary key/
    name varchar(8) UNIQUE,              /创建姓名    列上加入unique/
    sex varchar(1),                     /创建性别/
    score int                           /创建分数/

);

 

非空约束——NOT  NULL

声明了非空约束的列上禁止插入NULL

/*非空约束*/
    CREATE TABLE student(                /创建表名为student的表/
    sid int PRIMARY KEY,                 /创建编号    列上加入primary key/
    name varchar(8) UNIQUE,              /创建姓名    列上加入unique/
    sex varchar(1) NUT NULL,             /创建性别    列上加入nut null/
    score int                           /创建分数/

);

 

默认值约束——DEFAULT

可以通过DEFAULT给列设置默认值,具体方式有两种

                     1.insert into laptop values5,‘小米’,default……);

                     2.insert into laptop(lid,title) values(6,’apple’)

/*默认值约束*/
    CREATE TABLE student(                /创建表名为student的表/
    sid int PRIMARY KEY,                 /创建编号    列上加入primary key/
    name varchar(8) UNIQUE,              /创建姓名    列上加入unique/
    sex varchar(1) NUT NULL,             /创建性别    列上加入nut null/
    score int DEFAULT 60                 /创建分数    列上加入default/
);

    INSERT INTO student VALUES('1','xiaoming','0',default);    /设置了默认分数为60/

外键约束

外键的取值范围必须到另外一个表的主键列中去寻找。两者的列类型要保持一致

 

  1. 使用方法:foreign key(外键列) references 另一个表(主键列)

 

/*外键约束*/

    CREATE TABLE student(                /创建表名为student的表/
    sid int PRIMARY KEY,                 /创建编号    列上加入primary key/
    name varchar(8) UNIQUE,              /创建姓名    列上加入unique/
    sex varchar(1) NUT NULL,             /创建性别    列上加入nut null/
    score int DEFAULT 60,                /创建分数    列上加入default/
    FOREIGN KEY(famliyId) references famliy(fid)  /把familyId作为外键,取值要到family中的fid中去找/
);

 

 

自增列——auto_increment

自动增长,自动获取当前的最大值,然后加1插入,自增列添加在主键列上

注意:只适用于整数型的列上,同时允许手动赋值,如果想要实现自增,需要赋值NULL,允许使用NULL

/*自增列*/
    CREATE TABLE student(                /创建表名为student的表/
    sid int PRIMARY KEY,                 /创建编号    列上加入primary key/
    name varchar(8) UNIQUE,              /创建姓名    列上加入unique/
    sex varchar(1) NUT NULL,             /创建性别    列上加入nut null/
    score int DEFAULT 60                 /创建分数    列上加入default/
);

    INSERT INTO student VALUES(NULL,'xiaoming','0','85');    /设置了自增/

 

3.5.1 简单查询

1.查询特定的列

/*查询特定的列*/

    	SELECT eid,ename FROM emp;     (查询所有员工的编号和姓名)
	SELECT ename,sex, salary, birthday FROM emp;    (查询所有员工的姓名,性别,工资,生日)

 

 

2.查询所有的列

/*查询所有的列*/

        select * from emp;(查询所有员工的内容)
	select eid,ename,sex,birthday,salary,deptId from emp;(查询所有员工的内容)

 

3.给列起别名

/*给列起别名*/

        Select eid as 编号,ename as 姓名 from emp;(查询出所有员工的编号和姓名,使用汉字别名)
	Select ename as 姓名,sex 性别,birthday 生日 from emp;(查询所有员工的姓名生日性别 注意:as关键字可以省略)
        Select ename a,salary b from emp;(查询所有员工的工资和姓名,并使用别名为字母)

 

4.显示不同的记录

/*显示不同的记录*/

    Select distinct deptId from emp;(查询出员工所属部门编号有哪些)
    Select distinct sex from emp;(查询出都有哪些性别的员工)

 

5.查询时执行计算

/*查询时进行计算*/

    Select 1+2+3-5*8.3+935*7;(计算1+2+3-5*8.3+935*7)
    Select ename 姓名,salary *12 from emp;(查询出员工的姓名及其年薪)
    Select ename 姓名,(salary+500)*12+10000 年薪 from emp;(假设每个员工的工资增长500元,年终奖10000,查询所有员工的姓名及其年薪 )

 

6.对结果集排序

如果不加排序规则,默认按照升序进行排列(ASC)

/*按照结果集排序*/

        Select * from dept order by did asc;(查询所有的部门,结果集按照编号的升序排列)
	Select * from dept order by did desc;(查询所有的部门,结果集按照编号的降序排列)
	Select * from emp order by salary desc; (查询所有的员工,结果集按照工资的降序排列)
	Select * from emp order by birthday asc;(查询所有的员工,结果按照年龄从大大小)

        Select * from emp order by ename asc;(查询所有的员工,结果按照姓名升序排列)
注意:上述排列按照unicode码排序
	Select * from emp order by salary desc,ename asc;(查询所有的员工,结果集按照工资的降序排列,如果工资相同,按照姓名排列)
	Select * from emp order by sex asc,birthday asc;(查询所有的员工,结果集要求女员工显示在前,如果性别相同,按照年龄从大到小排列)

 

 

7.条件查询

/*条件查询*/

        Select * from emp where eid=5;(查询编号为5的员工的所有列)

	Select * from emp where ename=’King’;(查询出姓名为king的员工所有列)

	Select * from emp where deptId=20;(查询出20号部门下的员工有哪些)

	Select * from emp where salary >5000;(查询出工资在5000以上的所有列)

	Select * from emp where birthday>=’1991-1-1’; (查询出1991年后出生的员工有哪些)

 	Select * from emp where deptId !=10;(查询出不在10号部分的员工有哪些)

	Select * from emp where deptId  is NULL;(查询出没有明确部门的员工有哪些)

	Select * from emp where deptId  is  not NULL;(查询出有明确部门的员工有哪些)

	Select * from emp where sex=1 and salary>5000;(查询出工资在5000以上的男员工)

	Select * from emp where salary>=5000 and salary<=7000;(查询出工资在5000-7000的员工有哪些)

	Select * from emp where salary between 5000 and 7000; (查询出工资在5000-7000的员工有哪些)

	Select * from emp where salary>7000 or salary <5000;(查询出工资不在5000-7000的员工有哪些)

	Select * from emp where salary not between 5000 and 7000; (查询出工资不在5000-7000的员工有哪些)

	Select * from emp where birthday between‘1993-1-1’and‘1993-12-31’;(查询出1993年出生的员工有哪些)

        Select * from emp where birthday >=‘1993-1-1’and  birthday<=‘1993-12-31’; (查询出1993年出生的员工有哪些)

        Select * from emp where deptId=20 or deptId = 30;(查询出20号部分和30号部分的员工有哪些 满足其一 or)

	Select * from emp where deptId in (20,30); (查询出20号部分和30号部分的员工有哪些 满足其一 in)

	Select * from emp where deptId not in(20,30) ;(要求查询出不在20号部门也不再30号部门的员工有哪些)

 

8.模糊条件查询:

/*模糊条件查询*/

    Select * from emp where ename like ‘%e%’;    查询员工姓名中含有字母e的样有哪些

    Select * from emp where ename like ‘%e’;     查询姓名中以e结尾的员工

    select * from emp where ename like ‘%e_’;    查询姓名中倒数第二个字符为e的员工有哪些

 

 

9.分页查询

/*分页查询*/

                                            /假设每页显示五条数据:/
                                    第一页:select * from emp limit 0,5;
				    第二页:select * from emp limit 5,5;
				    第三页:select * from emp limit 10,5;

 

10.聚合查询和分组查询:

/*聚合查询和分组查询*/

    Select count(eid) from emp;        查询出所有员工的数量

    Select count(deptId) from emp;     通过部门编号这一列查询员工的数量

    Select count(ename) from emp where sex=1;     通过姓名查询所有男员工的数量

    Select sum(salary) from emp;    查询出所有员工工资总和

    Select avg(salary) from emp;    查询所有员工的平均工资

    Select  min(salary) from emp where sex=1;    查询出男员工的最低工资

    Select max(birthday) from emp;    查询出年龄最小的员工的生日
    
    Select max(salary),min(salary),avg(salary),deptId from emp group by deptId;    每个部门员工的最高工资,最低工资,平均工资
    
    Select count(sex),sum(salary),avg(salary),sex from emp group by sex;    查询出男女员工的数量,工资总和,平均工资

 

11.子查询

/*子查询*/
    i.	示例:查询出研发部的员工有哪些
步骤1:查询出研发部的部门编号是多少
	Select did from dept where dname=’研发部’;

步骤2:查询出部门编号为10的员工有哪些
	Select * from emp where deptId = 10;
	综合:select * from emp where deptId=( 	Select did from dept where dname=’研发部’);

    ii.	练习:查询出比tom工资高的员工有哪些
步骤1:查询tom的工资是多少
 select salary from emp where ename='Tom';
步骤2:查询比tom工资高的员工
select * from emp where salary >	6000;
综合:select * from emp where salary >(select salary from emp where ename='Tom');
    iii.	练习:查询出和tom同一年出生的员工有哪些
Year()获取日期中的年份
查询所有员工出生的年份:select year(birthday) from emp;

步骤1:查询tom出生的年份
	select year(birthday) from emp where ename=’tom’;
步骤2:查询出和tom一样出生年份的员工
	Select year(birthday) from emp where year(birthday)=1990;
综合:select *from emp where ename year(birthday)=(select year(birthday)  from emp where ename='tom')and ename !=’tom’;

 

12.多表查询

/*多表查询*/
    Select ename,dname from emp,dept where deptId=did;
     (存在问题:无法查询出没有部门的员工,也无法查出没有员工的部门。)

    1.	内连接:
a)	语法:select ename,dname from emp inner join dept on deptId=did;
    2.  左外连接:先写哪个表,哪个表就是左,会显示所有的记录,即便右侧表没有对应的数据
				a)	语法:select ename,dname from emp left outer join	 dept on deptId=did;
    3.  右外连接:后写哪个表,哪个表就是右,会显示所有的记录,即便左侧表没有对应的数据
				a)	 语法:select ename,dname from emp right outer join dept on deptId=did;
左外和右外连接中的Outer 关键字可以省略不写
    4.	全连接
					Full join (mysql不支持这种连接)
		
左外和右外的结果组合起来
	Union
	Union all (不合并相同的记录)
	(select  ename,dname from emp left outer join	 		dept on deptId=did)
		Union all /union
	(select ename,dname from emp right outer join dept on deptId=did);

 

 

 

 

 

 

 

 

标签:ename,数据库,查询,emp,student,mysql,操作,where,Select
来源: https://blog.csdn.net/RedZiteng/article/details/106966226

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有