您的位置:

mysql的基础运用及代码(mysql基础知识笔记)

本文目录一览:

15个MySQL常用基本SQL语句

在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。

在MySQL中,数据库称为database,数据表称为table,一个数据库软件中有多个数据库(databases),每个数据库中又可以有多个数据表(tables),最终,数据是存储在数据表中。

数据库和数据表之间的关系可以用下面这个图来表示,对于一个数据库来说,有多个数据表。

在正式开始写SQL语句之前,需要说明两点。

这里通过MySQL Workbench来写SQL代码,在Workbench中,执行一条SQL语句的方式有两种。

了解了这之后,接下来介绍一些常见的命令,分两部分:数据库常用命令和数据表常用命令。

1、查看有哪些数据库

2、创建数据库

创建一个名为Testdb的数据库。

3、创建数据库并指定编码格式

有些时候,为了防止中文乱码,创建数据库的时候需要指定编码格式。

4、使用某个数据库

使用mydb这个数据库,或者进入mydb这个数据库。

5、删除数据库

删除Testdb这个数据库。

1、查看有哪些数据表

进入某个数据库之后,想查看有哪些数据表,SQL语句为:

mydb是一个新建的数据库,所以自然是没有数据表。

2、创建数据表

建表SQL语句格式为:

说明: 每个字段以逗号分隔,最后一个字段不加逗号。

例如,给定一个学员信息表,如下表所示。

根据以上表格,建表SQL语句如下。

以上语句中,primary key表示主键,意思是这个字段作为记录的唯一标识,就像每个人的身份证号,都是唯一确定的。

3、查看表结构

查看表结构的SQL命令为:

执行该命令会显示表stuinfo的基本结构,例如有哪些字段,每个字段是什么类型,谁是主键等。

4、修改数据表

修改数据表通过drop子句进行,比如,建完表后,想增加一个字段,SQL语句的格式为:

想在指定位置增加一个字段,例如,在某个字段后增加一个字段,SQL语句的格式为:

如果在某个字段之前增加字段,用before即可。

例如,在字段age后增加一个字段major(专业),SQL语句为:

执行这个命令,再通过describe查看表结构,会发现表中多了一个字段major。

如果要删除major这个字段,通过drop子句,SQL语句为:

5、重命名表

重命名表通过alter+rename来实现,SQL语句格式为:

这里为了不影响之前创建的表,我们创建一个新表,SQL语句如下。

以上创建一个名为stuInfoTest的表,现在想将它的名称改成stuinfotest1,SQL语句为:

6、删除数据表

删除数据表通过drop进行,SQL语句格式为:

例如,删除数据表stuinfotest1,SQL语句为:

7、插入记录

此时的表stuinfo是空的,没有数据,我们要向表中插入记录。

插入记录通过insert into进行,SQL语句格式为:

例如,向表stuinfo插入一条记录,SQL语句为:

注意:上方是一条SQL语句,为了可读性换行,记住一条SQL语句默认以分号结尾。

如果需要一次性插入多条记录,SQL语句格式为:

例如,向表stuinfo再插入两条记录,SQL语句为:

注意:如果设置了主键,插入记录的主键字段是不能重复的,也就是不能插入重复的记录。

作业:大家可以按照上述方法将上面的学员信息表中的所有记录都插入表stuinfo中。

8、查询记录

有了数据之后,就可以查询记录了,查询记录通过select子句进行。

例如,想查询表stuinfo中的所有记录,SQL语句为:

执行之后,就可以看到表stuinfo中的所有记录了。

如果想查询符合某个条件的记录,就要用到where子句了,SQL格式为:

例如,想查询stuid为20161001的记录,SQL语句为:

9、删除记录

删除记录通过delete子句进行,SQL语句格式为:

例如,想删除stuid为20161002的记录,SQL语句为:

10、修改记录

修改记录通过update子句进行,update就是更新的意思,SQL语句格式为:

例如,想将学号(stuid)为20161001的记录的姓名(stuname)更新为Jack,SQL语句为:

以上,就是MySQL中的基本SQL语句。

零基础如何学习数据分析?查看下方专栏。

mysql中的一些稍微复杂用法实例代码

前言

mysql的语法相信对大家来说都不是难事,但是本文主要给分享了一些mysql复杂用法的相关内容,通过这篇文章相信大家会对mysql更深的了解一些,下面话不多说了,来一起看看详细的介绍吧

一对多数据显示成一行

GROUP_CONCAT(expr)

1、涉及的表关系:teacher表、teacher_subject_rel表(教师所能教的学科表)、subject表

2、业务场景:

需要拉取所有教师的编号(teacher_no)、学科名(subject_name)。

nbsp

教师表(teacher)和学科(teacher_subject_rel)是一对多关系,

往往查询出现的是同一教师多条

数据。我们希望得到每个教师一条数据

学科拼接成一条

1、基本语法

group_concat(

[DISTINCT]

要连接的字段

[Order

BY

排序字段

ASC/DESC]

[Separator

'分隔符']

)

2、例子

SELECT

t.teacher_id

as

'教师id',

t.teacher_no

'教师编号',

(

SELECT

GROUP_CONCAT(s.subject_name)

FROM

teacher_subject_rel

tsr

LEFT

JOIN

`subject`

s

ON

tsr.subject_id

=

s.subject_id

WHERE

t.teacher_id

=

tsr.teacher_id

)

AS

'学科'

FROM

teacher

t

子查询、查询临时表、EXISTS

例子

SELECT

*

FROM

(

SELECT

o.id,

o.student_intention_id,

s.

NAME,

s.area_id,

a.area_name,

s.exam_year,

o.

STATUS,

CASE

o.

STATUS

WHEN

'1'

THEN

'待提交'

WHEN

'2'

THEN

'待指派'

WHEN

'3'

THEN

'已完成'

WHEN

'4'

THEN

'处理中'

END

statusName,

CASE

o.emergency_degree

WHEN

'1'

THEN

'正常'

WHEN

'2'

THEN

'紧急'

WHEN

'3'

THEN

'非常紧急'

END

emergencyDegreeName,

o.emergency_degree,

o.update_time,

(

SELECT

first_lesson_time

FROM

jx_strategy

WHERE

jx_lesson_plan_order_id

=

o.id

AND

STATUS

IN

(2,

7)

AND

first_lesson_time

now()

ORDER

BY

first_lesson_time

ASC

LIMIT

1

)

AS

first_time,

(

SELECT

deal_user_id

FROM

jx_strategy

WHERE

jx_lesson_plan_order_id

=

o.id

AND

STATUS

7

AND

deal_user_id

ORDER

BY

id

DESC

LIMIT

1

)

AS

deal_user_id

FROM

jx_lesson_plan_order

o

LEFT

JOIN

student

s

ON

s.student_intention_id

=

o.student_intention_id

LEFT

JOIN

area

a

ON

s.area_id

=

a.id

WHERE

o.

STATUS

1

AND

s.phone

=

'18501665888'

AND

o.emergency_degree

=

1

AND

o.

STATUS

=

2

AND

s.exam_year

=

'2015'

AND

o.update_time

=

'2018-08-14

20:28:55'

AND

o.update_time

=

'2018-08-14

20:28:55'

)

AS

a

WHERE

1

=

1

AND

a.deal_user_id

=

145316

AND

a.first_time

=

'2018-08-17

00:00:00'

AND

a.first_time

=

'2018-08-30

00:00:00'

AND

EXISTS

(

SELECT

*

FROM

jx_strategy

js

WHERE

js.jx_lesson_plan_order_id

=

a.id

AND

js.

STATUS

IN

(2,

7)

AND

js.subject_id

IN

(2,

3)

)

ORDER

BY

a.update_time

DESC

LIMIT

0,

10

update

关联变量条件修改

1、涉及的表关系:

user_info表中的

id_number(身份证号)

teacher表中的birth字段、

关联关系usrer_id

=

teacher_id

2、业务场景:获取用户身份证上的出生日期将出生日期更新在birth字段

UPDATE

teacher

t

INNER

JOIN

(

SELECT

t.teacher_id,

t.birth,

u.id_number,

CONCAT(SUBSTRING(u.id_number,

7,

4),

'-',

SUBSTRING(u.id_number,

11,

2),

'-',

SUBSTRING(u.id_number,

13,

2))

as

birth1,

u.reg_date,

t.exit_time

from

teacher

t

INNER

JOIN

user_info

u

ON

u.user_id

=

t.teacher_id

)

info

on

info.teacher_id

=

t.teacher_id

SET

t.birth

=

info.birth1

WHERE

info.reg_date

'2018-08-20

00:00:00'

and

info.id_number

is

not

NULL

and

(info.birth

is

NULL

or

t.birth

=

'')

and

t.is_train

=

1

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

您可能感兴趣的文章:MySQL在关联复杂情况下所能做出的一些优化Mysql一些复杂的sql语句(查询与删除重复的行)深入mysql

"ON

DUPLICATE

KEY

UPDATE"

语法的分析MySQL

最基本的SQL语法/语句MySQL与Oracle的语法区别详细对比浅析Mysql

Join语法以及性能优化MySQL

ALTER语法的运用方法MySQL

prepare语句的SQL语法MySQL进阶SELECT语法篇MySQL

SQL

语法参考

高分求mysql创建数据库及表的代码?

创造并使用一个数据库

mysql SHOW DATABASES;

+----------+

| Database |

+----------+

| mysql |

| test |

| tmp |

+----------+

mysql USE test

Database changed

mysql GRANT ALL ON menagerie.* TO your_mysql_name;

mysql CREATE DATABASE menagerie;

mysql USE menagerie

Database changed

shell mysql -h host -u user -p menagerie

Enter password: ********

8.4.2 创建一个数据库表

创建数据库是容易的部分,但是在这时它是空的,正如SHOW TABLES将告诉你:

mysql SHOW TABLES;

Empty set (0.00 sec)

使用一个CREATE TABLE语句指定你的数据库表的布局:

mysql CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),

- species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);

VARCHAR对name、owner和species列是个好的选择,因为列值将会是变长的。这些列的长度都不必是相同的,而且不必是20。你可以挑选从1到255的任何长度,无论哪个对你来说好象最合理。(如果你做了较差的选择,以后会变得你需要一个更长的字段,MySQL提供一个ALTER TABLE语句。)

动物性表可以用许多方法表示,例如,"m"和"f",或也许"male"和"female"。使用单个字符"m"和"f"是最简单的。

为birth和death列使用DATE数据类型是相当明显的选择。

求这几个步骤的MySQL操作代码

3.

SELECT count(*)as count , s.cno ,c.cname

 FROM `score` as s left join course as c on s.cno = c.cno group  by

 

 s.cno  order by count desc limit 1;

4.SELECT

max(s.score),

s.cno,

c.cname

FROM

`score` AS s

LEFT JOIN course AS c on s.cno = c.cno

GROUP BY

s.cno

;

5.

SELECT

sum(s.score),

s.cno,

d.sname

FROM

`score` AS s

LEFT JOIN student AS d on s.sno = d.sno

GROUP BY

s.sno;

6.SELECT

avg(s.score),

s.cno,

c.cname

FROM

`score` AS s

LEFT JOIN course AS c on s.cno = c.cno

GROUP BY

s.cno;

7.

SELECT count(*) FROM `teacher` where tname like "李%"    ;

java连接数据库mysql代码及简单访问数据库

import java.sql.*;

public class DataBasePractice {

public static void main(String[] args) {

//声明Connection对象

Connection con;

//驱动程序名

String driver = "com.mysql.jdbc.Driver";

//URL指向要访问的数据库名mydata

String url = "jdbc:mysql://localhost:3306/mydata";

//MySQL配置时的用户名

String user = "root";

//MySQL配置时的密码

String password = "root";

//遍历查询结果集

try {

//加载驱动程序

Class.forName(driver);

//1.getConnection()方法,连接MySQL数据库!!

con = DriverManager.getConnection(url,user,password);

if(!con.isClosed())

System.out.println("Succeeded connecting to the Database!");

//2.创建statement类对象,用来执行SQL语句!!

Statement statement = con.createStatement();

//要执行的SQL语句

String sql = "select * from student";

//3.ResultSet类,用来存放获取的结果集!!

ResultSet rs = statement.executeQuery(sql);

System.out.println("-----------------");

System.out.println("执行结果如下所示:");

System.out.println("-----------------");

System.out.println(" 学号" + "\t" + " 姓名");

System.out.println("-----------------");

String name = null;

String id = null;

while(rs.next()){

//获取stuname这列数据

name = rs.getString("stuname");

//获取stuid这列数据

id = rs.getString("stuid");

//首先使用ISO-8859-1字符集将name解码为字节序列并将结果存储新的字节数组中。

//然后使用GB2312字符集解码指定的字节数组。

name = new String(name.getBytes("ISO-8859-1"),"gb2312");

//输出结果

System.out.println(id + "\t" + name);

}

rs.close();

con.close();

} catch(ClassNotFoundException e) {

//数据库驱动类异常处理

System.out.println("Sorry,can`t find the Driver!");

e.printStackTrace();

} catch(SQLException e) {

//数据库连接失败异常处理

e.printStackTrace();

}catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}finally{

System.out.println("数据库数据成功获取!!");

}

}

}

在上面while代码段后面添加以下代码段:

String name = null;

String id = null;

while(rs.next()){

//获取stuname这列数据

name = rs.getString("stuname");

//获取stuid这列数据

id = rs.getString("stuid");

//首先使用ISO-8859-1字符集将name解码为字节序列并将结果存储新的字节数组中。

//然后使用GB2312字符集解码指定的字节数组。

name = new String(name.getBytes("ISO-8859-1"),"gb2312");

//输出结果

System.out.println(id + "\t" + name);

}

PreparedStatement psql;

ResultSet res;

//预处理添加数据,其中有两个参数--“?”

psql = con.prepareStatement("insert into student values(?,?)");

psql.setInt(1, 8); //设置参数1,创建id为5的数据

psql.setString(2, "xiaogang"); //设置参数2,name 为小明

psql.executeUpdate(); //执行更新

//预处理更新(修改)数据

psql = con.prepareStatement("update student set stuname = ? where stuid = ?");

psql.setString(1,"xiaowang"); //设置参数1,将name改为王五

psql.setInt(2,10); //设置参数2,将id为2的数据做修改

psql.executeUpdate();

//预处理删除数据

psql = con.prepareStatement("delete from student where stuid = ?");

psql.setInt(1, 5);

psql.executeUpdate();

//查询修改数据后student表中的数据

psql = con.prepareStatement("select*from student");

res = psql.executeQuery(); //执行预处理sql语句

System.out.println("执行增加、修改、删除后的数据");

while(res.next()){

name = res.getString("stuname");

id = res.getString("stuid");

name = new String(name.getBytes("ISO-8859-1"),"gb2312");

System.out.println(id + "\t" + name);

}

res.close();

psql.close();