当前位置: 首页 > news >正文

SQL语句-中级

 一、Mysql软件使用

1.启动/停止Mysql服务器

任务管理器

cmd命令:以管理员的身份打开cmd命令行

net start mysql80//开启net stop mysql80//停止 

2.连接与断开Mysql服务器

注意要在bin目录下执行:-u用户名root,-p密码

mysql -u root -p

可能出现的问题:

配置环境变量-右键此电脑——>点击属性——>高级设置——>系统属性——>用户变量新建——>复制Mysql的bin目录地址即可

 另一个是我遇到的,推荐这个博主文章:关于Can't connect to MySQL server on 'localhost:3306' (10061)问题-http://t.csdnimg.cn/gjGFK

退出:

quit;

 二、数据库与表结构操作

1.对数据库的操作

数据库的创建:

create database test;create schema test1;//与上一句都是创建数据库create database test2
character set=gbk;//创建时可设置编码格式-汉字编码create database if not exists test;//创建时可先进行判断

修改数据库:

 alter database 数据库名default character set gbk//修改字符集编码为gbkdefault collate gbk_chinese_ci;//修改字符集校对规则编码为gbk,字符集编码必须要一致

删除数据库:

 drop database 数据库名;

选择数据库:

use 数据库名;

2.数据类型

数据库中的数据类型对应C语言中的数据类型

tinyint---1个字节:-128~127;unsigned-0~255
smallint---2个字节:
int---4个字节:
bigint---8个字节:相当于long型
float(5,2)---4个字节:表示共5个数字长度,有2个小数位
unsigned表示无符号类型,即正数
char-定长字符类型,长度固定;varchar-变长字符串类型,按实际长度存储
tinytext--存储短文本字符串date---年月日YYYY-MM-DD;time---时分秒HH:MM:SS
datetime---date+time

3.表结构操作

alter table t_table1 add detail tinytext ;-- 添加新属性/字段
alter table t_table1 modify detail varchar(20) ; -- 修改属性类型/字段
alter table t_table1 change detail details varchar(20) ; -- 修改属性名/字段
alter table t_table1 drop column details;--  删除字段
rename table t_table1 to table1;-- 修改表名 
drop table if exists test;-- 删除表 

三、多表操作

1.多表设计

一对多:部门与员工

create table labor(
id int unsigned primary key auto_increment,
username varchar(20) not null,
gender tinyint unsigned not null,
departure_id int unsigned,
create_time datetime not null) comment '员工表';create table departure(
id int unsigned primary key auto_increment,
name varchar(10) not null unique,
create_time datetime not null
) comment '部门表';//对已建表添加联系/约束:一个部门对应多个员工
alter table labor add constraint c1(约束名可任意取) foreign key(departure_id) references departure(id);//创建表时添加联系/约束
create table managers( 
id int unsigned primary key auto_increment,
name varchar(20),
departure_id int unsigned,
labor_id int unsigned,
constraint m1 foreign key(departure_id) references departure(id)) comment '部门经理';//删除约束
alter table managers drop constraint c1(约束名);

一对一:用户与身份证-将单表进行拆分 

create table labor(
id int unsigned primary key auto_increment,
username varchar(20) not null,
gender tinyint unsigned not null,
departure_id int unsigned,
create_time datetime not null) comment '员工表';create table labor_card(
id int unsigned primary key auto_increment,
birthday date not null,
idcard char(18) not null,
labor_id int unsigned not null unique,//一定要加unique,否则不能实现一对一
constraint l1 foreign key (labor_id) references labor(id)
) comment '员工身份信息表';

多对多:学生与课程-借助中间表实现,分别关联两方主键

create table stu(
id int auto_increment primary key,
name varchar(20),
num varchar(10)
) comment '学生表';
insert into stu(name,num) values('湘城','20210133'),('源思','20210522'),('砂峮','20211344'),('信肆','20212345');create table course(
id int auto_increment primary key,
name varchar(20)
) comment '课程表';
insert into course(name) values('C'),('PHP'),('Java');create table stu_cour(
id int auto_increment primary key,
stu_id int not null,
cour_id int not null,
constraint s1 foreign key (stu_id) references stu(id),
constraint s2 foreign key (cour_id) references course(id)
) comment '中间表';
insert into stu_cour(stu_id,cour_id) values(1,2),(1,1),(2,2),(2,3);

2.多表查询

//查询所有
select * from stu,course;-- 笛卡尔积:A、B所有组合情况 ,包括重复记录//内连接查询
select * from stu,course where stu.id=course.id; -- 隐式内连接查询:消除重复记录
select stu.name,course.name from stu,course where stu.id=course.id; -- 查询特定数据
select s.name,c.name from stu s,course c where s.id=c.id; --  给表起别名select * from stu  (inner) join course on stu.id=course.id --  显式内连接查询-inner可省略//外连接查询
select * from stu left join course on stu.id=course.id; -- 左外连接:查询stu表的所有数据及其对应course数据 
select * from stu right join course on stu.id=course.id; -- 右外连接:查询course表的所有数据及其对应stu表的数据 //子查询:嵌套查询
select * from stu where num>(select num from stu where name='湘城'); -- 单行单列
select * from course where id!=(select id from course where name='C')select * from stu where name='源思' or num=20210133 -- 多行单列查询
select * from stu where num in (20210133,20210522)select * from (select * from stu where num>20210522) t1,course where t1.id=course.id -- 多行多列,放在from后作为虚拟表进行查询

http://www.lryc.cn/news/192719.html

相关文章:

  • 巧用h2-database.jar连接数据库
  • 136.只出现一次的数字
  • mysql中遇到查询字段的别名与函数冲突问题
  • 直播获奖
  • 选择适合自身业务的HTTP代理有哪些因素决定?
  • 1.3 do...while实现1+...100 for实现1+...100
  • react数据管理之setState与Props
  • 如何保护我们的网络安全
  • springboot 制造装备物联及生产管理ERP系统
  • Google zxing 生成带logo的二维码图片
  • 使用Python计算平面多边形间最短距离
  • 【Python】Python语言基础(中)
  • 观察者模式、订阅者发布者模式、vtk中的观察者模式
  • 关于element-ui中,页面上有多个el-table并通过v-if、v-else等控制是否显示时,type=selection勾选框失效或不显示的问题
  • Stewart六自由度正解、逆解计算-C#和Matlab程序
  • C语言 驼峰命名法和下划线命名法
  • 大数据学习(8)-hive压缩
  • [sqoop]hive导入mysql,其中mysql的列存在默认值列
  • Stream流中的常用方法(forEach,filter,map,count,limit,skip,concat)和Stream流的特点
  • 2023大联盟2比赛总结
  • Flutter笔记:电商中文货币显示插件Money Display
  • 腾讯云上创建 对象存储cos
  • 微信小程序生成海报
  • stm32学习笔记:EXIT中断
  • css 块元素、行内元素、行内块元素相互转换
  • 【JUC】多线程基础概述
  • Git 回退代码的两种方法对比
  • Avalonia常用小控件Charts
  • 【Hugging Face】管理 huggingface_hub 缓存系统
  • Python学习基础笔记六十六——对象的方法