SQL基础学习(一)

数据库

  • 以前通过IO技术对数据进行增删改查操作,需要书写大量相关代码,并且不能保证程序的执行效率,开发周期会很长,互联网行业,凡是遇到频繁使用并且实现又很复杂的 肯定会有一个通用的解决方案,我们只需要学会如何使用即可,数据库软件就是这样一个三方的对数据进行增删改查的解决方案,学习数据库软件主要就是学习一门语言 叫做SQL(Structed Query Language结构化查询语言).

  • DBMS: Database Management System数据库管理系统(数据库软件),常见的DBMS有:

    1. MySQL: Oracle公司产品, 08年被Sun公司收购,09年Sun被Oracle收购, 开源产品 免费使用, MariaDB , 市占率第一
    2. Oracle: Oracle公司产品, 性能最高价格最贵. 市占率第二, 拉里埃里森32创业创办Oracle
    3. SQLServer:微软公司产品, 闭源产品, 应用在微软整套解决方案中,市占率第三
    4. DB2: IBM公司产品,闭源产品,应用在IBM整套解决方案中
    5. SQLite: 轻量级数据库,应用在嵌入式设备和移动设备

    网站: 开发语言 + 操作系统 + webServer + 数据库软件

  • 开源和闭源:

    1. 开源: 开放源代码, 免费, 盈利方式: 通过卖服务 , 有人会无偿维护和升级
    2. 闭源: 不公开源代码, 盈利方式:卖产品+卖服务 , 有人会攻击找漏洞(闭源产品公司会养一帮人负责维护升级)

如何连接数据库软件

  1. linux: 桌面右键打开终端 -> mysql -uroot -p回车->有密码写密码 没有直接回车
  2. windows: 开始菜单->所有程序 -> MySQL->MySQL Client->输入密码 回车
  • 退出: exit; 回车

DDL 数据定义语言

  • 数据库软件中保存数据需要先建库再建表

数据库相关SQL

  1. 查询所有数据库
show databases;
  1. 创建数据库
  • 格式: create database 数据库名 character set utf8/gbk;
create database db1 character set utf8;
create database db2 character set gbk;
  1. 查询数据库详情
  • 格式: show create database 数据库名;
show create database db1;
  1. 删除数据库
  • 格式: drop database 数据库名;
drop database db1;
  1. 使用数据库
  • 格式: use 数据库名;
use db2;
练习:
  1. 分别创建mydb1和mydb2数据库 第一个是gbk第二个是utf8
create database mydb1 character set gbk;
create database mydb2 character set utf8;
  1. 创建完后查询所有表检查是否存在
show databases;
  1. 查询两个数据库的字符集是否正确
show create database mydb1;
show create database mydb2;
  1. 先使用mydb1 再使用mydb2
use mydb1;
use mydb2;
  1. 删除两个数据库
drop database mydb1;
drop database mydb2;

表相关SQL

  • 操作表和数据时 一定要保证已经使用了某个数据库
create database db1 character set utf8;
use db1;
  1. 创建表
  • 格式: create table 表名(字段1名 类型,字段2名 类型) charset=utf8/gbk;
create table person(name varchar(10),age int) charset=utf8;
  • 练习: 创建学生表student 有姓名name和语chinese数math外english
create table student(name varchar(10),chinese int,math int,english int) charset=gbk;
  1. 查询所有表
  • 格式: show tables;
  1. 查看表详情
  • 格式: show create table 表名;
show create table student;
  1. 查看表字段
  • 格式: desc 表名;
desc student;
  1. 删除表
  • 格式: drop table 表名;
drop table student;
  1. 添加表字段
  • 最后面添加字段:alter table 表名 add 字段名 类型;
alter table person add gender varchar(5);
  • 最前面添加字段:alter table 表名 add 字段名 类型 first;
alter table person add id int first;
  • xxx字段后面添加字段:alter table 表名 add 字段名 类型 after xxx;
alter table person add salary int after name;
  1. 删除表字段
  • 格式: alter table 表名 drop 字段名;
alter table person drop salary;
  1. 修改表字段
  • 格式: alter table 表名 change 原名 新名 新类型;
alter table person change gender salary int;

数据库和表相关练习:

  1. 创建数据库mydb1 字符集为utf8 并使用该数据库
create database mydb1 character set utf8;
use mydb1;	 
  1. 在mydb1中创建员工表emp 字段有name 字符集为utf8
create table emp(name varchar(10))charset=utf8;
  1. 添加表字段age在最后面
alter table emp add age int;
  1. 添加id字段在最前面
alter table emp add id int first;
  1. 添加sal字段在name的后面
alter table emp add sal int after name;
  1. 修改字段sal为salary
alter table emp change sal salary int;
  1. 删除age字段
alter table emp drop age;
  1. 删除emp表
drop table emp;  
  1. 删除数据库
drop database mydb1;

DML 数据操作语言

create database mydb1 character set utf8;
use mydb1;
create table person(id int,name varchar(10),age int)charset=utf8;
show create table person; #检查是不是utf8
  1. 插入
  • 全表插入格式: insert into 表名 values(值1,值2,值3);
insert into person values(1,'Tom',18);
  • 指定字段格式: inaert into 表名(字段1名,字段2名) values(值1,值2);
insert into person(name,age) values('Jerry',20);
  • 批量插入:
insert into person values(10,'aaa',20),(11,'bbb',21),(12,'ccc',22);
insert into person(name) values('xxx'),('yyy'),('zzz');
  • 中文问题:
    insert into person values(20,‘刘德华’,18);
    中文乱码的执行:set names gbk;
  1. 查询
  • 格式: select 字段信息 from 表名 where 条件;
    -举例:
# 查询表中所有的名字
select name from person;  
# 查询表中所有的名字和年龄
select name,age from person; 
# 查询表中的所有数据;
select * from person; 
# 查询id为1的名字
select name from person where id=1; 
  1. 修改
  • 格式: update 表名 set 字段名=值 where 条件;
update person set name='张三' where id=1;
  1. 删除
  • 格式: delete from 表名 where 条件;
delete from person where id=1;
delete from person where id>10;
delete from person;

练习:

  1. 创建hero表 id 名字name 类型type 价格money 字符集为utf8
create table hero(id int,name varchar(10),type varchar(10),money int)charset=utf8;
  1. 保存以下数据:
 insert into hero values(1,'诸葛亮','法师',18888),
	(2, '周瑜','法师',13888),(3,'孙悟空', '打野', 18888),  
	(4, '小乔', '法师', 13888),(5,'黄忠', '射手',8888),
	(6, '刘备', '战士', 6888); 
  1. 修改所有18888为28888
update hero set money=28888 where money=18888; 
  1. 修改所有法师为战士
update hero set type='战士' where type='法师';
  1. 删除价格为6888的英雄
delete from hero where money=6888;
  1. 修改小乔为猪八戒
update hero set name='猪八戒' where name='小乔';
  1. 删除价格低于15000的英雄
delete from hero where money<15000;
  1. 添加性别gender字段在name的后面
alter table hero add gender varchar(5) after name;
  1. 修改所有英雄的性别为男
update hero set gender='男';
  1. 删除所有数据
delete from hero;
  1. 删除表
drop table hero;

数据类型

  1. 整数: intbigint(等效long)
  2. 浮点数: double(m,d) m代表总长度 d代表小数长度 23.567 m=5 d=3
    超高精度浮点数decimal(m,d)涉及超高精度运算时使用
  3. 字符串
  • char(m): 固定长度, char(10) “abc” 占10个长度, 执行效率略高 ,最大长度255
  • varchar(m):可变长度, varchar(10) “abc” 占3个长度 ,更节省资源 ,最大长度65535 但是建议保存255以内的 ,超过255建议使用text
  • text(m):可变长度,最大长度65535
  1. 日期
  • date: 保存年月日
  • time: 保存时分秒
  • datetime: 默认值为null, 最大值 9999-12-31
  • timestamp: 默认值为当前系统时间, 最大值 2038-1-19
create table t_date(t1 date,t2 time,t3 datetime,t4 timestamp);
insert into t_date values('2019-11-8',null,null,null);
insert into t_date values(null,'17:30:18','2019-10-10 10:10:10',null);

小结:

  • DDL 数据定义语言
  1. 数据库相关SQL
  • 查询所有 show databases;
  • 创建 create database db1 character set utf8/gbk;
  • 查询详情 show create database db1;
  • 删除 drop database db1;
  • 使用 use db1;
  1. 表相关SQL
  • 创建 create table t1(name varchar(10),age int) charset=utf8/gbk;
  • 查询所有 show tables;
  • 查询详情 show create table t1;
  • 查询表字段 desc t1;
  • 删除表 drop table t1;
  • 添加字段 alter table t1 add age int first/after xxx;
  • 删除字段 alter table t1 drop 字段名;
  • 修改字段 alter table t1 change 原名 新名 新类型;
  1. DML数据操作语言 数据相关
  • 插入数据 insert into t1(xxx,xxx,xxx) values(值1,值2,值3),(值1,值2,值3);
  • 查询数据 select * from t1 where 条件;
  • 修改数据 update t1 set xxx=xxx where 条件;
  • 删除数据 delete from t1 where 条件;
  1. 数据类型
  • 整数: int和bigint(long)
  • 浮点数: double(m,d) m代表总长度 d代表小数长度 超高精度浮点数decimal
  • 字符串:
    char: 固定长度 最大 255
    varchar:可变长度 最大65535超过255建议使用text
    text:可变长度 最大65535
  • 日期:
    date: 保存年月日
    time: 保存时分秒
    datetime: 默认值是null 最大9999-12-31
    timestamp: 默认值当前系统时间 最大2038-1-19

练习:

  1. 创建数据库mydb2 字符集utf8 并使用
create database mydb2 character set utf8;
use mydb2;
  1. 在数据库中创建员工表emp 字段:id,name,sal,deptId(部门id) 字符集utf8
create table emp(id int,name varchar(10),sal int,deptId int)charset=utf8;
  1. 创建部门表dept 字段:id,name,loc(部门地点) 字符集utf8
create table dept(id int,name varchar(10),loc varchar(10)) charset=utf8;
  1. 部门表插入以下数据:
    1 神仙部 天庭 2 妖怪部 盘丝洞
insert into dept values(1,'神仙部','天庭'),(2,'妖怪部','盘丝洞');
  1. 员工表中插入以下数据:
    1 悟空 5000 1 2 八戒 2000 1
    3 蜘蛛精 8000 2 4 白骨精 9000 2
insert into emp values(1,'悟空',5000,1),(2,'八戒',2000,1),(3,'蜘蛛精',8000,2),(4,'白骨精',9000,2);
  1. 查询工资6000以下的员工姓名和工资
select name,sal from emp where sal<6000;
  1. 修改神仙部的名字为取经部
update dept set name='取经部' where name='神仙部';
  1. 给员工表添加奖金comm字段
alter table emp add comm int;
  1. 修改部门id为1的奖金为500
update emp set comm=500 where deptId=1;
  1. 把取经部门的地址改成五台山
update dept set loc='五台山' where name='取经部';

如果这篇文章有帮助到您,请简单给个赞吧,谢谢~

猜你喜欢

转载自blog.csdn.net/Kevinblant/article/details/120257992