日照网厂/网站seo课设
1.面向对象
(1)面向过程和面向对象
(2)类和对象
1. 类(Class)和对象(Object)是面向对象的核心概念
2.类的结构
3.创建并使用对象
4.总结类和对象
(3)构造方法
(4)方法重载
(5)对象与引用
(6)访问权限修饰符
-
三大特征:
- 封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式,提高安全性。
- 继承:提高代码复用性,是实现多态的前提。
- 多态:父类或接口定义的引用变量指向子类或具体实现类的实例对象,提高了代码的拓展性。
封装
继承
子承父类,父类通用,子类更具体
继承代码实现
1 /**
2 * 1. 将类中重复的部分提取成为父类
3 */
4 public class Animal {
5 private String name;
6 private String food;
7
8 public Animal(String name, String food) {
9 this.name = name;
10 this.food = food;
11 }
12
13 public void eat() {
14 System.out.println(name + "正在吃" + food);
15 }
16 }
17
18 /**
19 * 2. 子类继承父类,对父类进行扩展
20 */
21 public class Cat extends Animal {
22
23 public Cat(String name, String food) {
24 super(name, food);
25 }
26 }
27 public class Dog extends Animal{
28
29 public Dog(String name, String food) {
30 super(name, food);
31 }
32 }
33
34 /**
35 * 3. 测试
36 */
37 public class TestExtends{
38 public static void main(String[] args) {
39 Animal cat = new Cat("三三", "鱼");
40 cat.eat();
41 Animal dog = new Dog("二哈", "香肠");
42 cat.eat();
43 }
44 }
多态
1、核心:提高代码的的维护性和可扩展性
2、实现多态的三个必要条件:继承、重写、父类引用指向子类对象(向上转型)
3、多态的实现方法:重写、接口、抽象类和抽象方法
多态代码实现
1 /**
2 * 1. 创建动物类,定义动物吃什么的方法
3 */
4 class Animals {
5 private String name;
6 private String food;
7
8 public Animals(String name, String food) {
9 super();
10 this.name = name;
11 this.food = food;
12 }
13
14 public void eat() {
15 System.out.println(this.name + "会吃" + this.food);
16 }
17 }
18
20 /**
21 * 2. 创建Cat类来实现吃的功能
22 */
23 class Cat extends Animals{
24 public Cat(String name, String food) {
25 super(name, food);
26 }
27
28 @Override
29 public void eat() {
30 super.eat();
31 }
32 }
33
35 /**
36 * 3. 通过向上转型和向下转型实现多态
37 */
38 public class Test01 {
39 public static void main(String[] args) {
40 // 向下转型
41 Animals animals = new Cat("三三", "鱼");
42 animals.eat();
43 // 向上转型
44 Cat cat = (Cat) animals;
45 cat.eat();
46 }
47 }
(7)抽象类
核心思想:让代码有更强的可扩展性
特点
抽象类不能实例化对象。
如果一个类包含抽象方法,那么该类必须是抽象类
任何子类必须重写父类的抽象方法(具体实现),或者声明自身为抽象类
抽象类中的抽象方法只有方法声明,没有方法体
构造方法和static修饰的方法不能声明为抽象方法
代码实现
1 /**
2 * 1. 创建员工抽象类
3 */
4 abstract class Employees {
5 // 成员变量
6 private String name;
7 private String address;
8 private Integer number;
9
10 // 构造方法
11 public Employees(String name, String address, Integer number) {
12 System.out.println("Employees.Employees()");
13 this.name = name;
14 this.address = address;
15 this.number = number;
16 }
17
18 // 定义信息抽象函数
19 public abstract void call();
20
21 // 省略getter 和 setter方法
22 ......
23 }
24 }
25
26 class Salary extends Employees {
27 private Double salary;
28
29 public Salary(String name, String address, Integer number, Double salary) {
30 super(name, address, number);
31 this.salary = salary;
32 System.out.println("Salary.Salary()");
33 }
34
35 // 2. 重写父类的抽象方法
36 @Override
37 public void call() {
38 System.out.println(super.getNumber() + "是" + super.getName() + "的电话,他住在" +
39 super.getAddress() + "他现在的工资是" + this.salary);
40 }
41 }
42
43 public class Test {
44 public static void main(String[] args) {
45 // 3. 抽象类的对象必须由子类去实例化
46 Employees emp = new Salary("孙悟空", "花果山", 1234, 222.66);
47 emp.call();
48 }
49 }
(8)接口
特点:
接口不能实例化对象,没有构造方法
接口中的方法只能是抽象方法,默认使用public abstract修饰
接口中的变量只能是常量,默认使用public static final修饰
接口支持多继承,但接口不是被继承了,而是被实现了
接口和抽象类的区别
接口中的方法只能是抽象方法,而抽象类中的方法可以是普通方法,构造方法和抽象方法
接口中的变量只能是常量,而抽象类中的方法可以是任意类型
接口中不能含有静态代码块和静态方法,而抽象类中可以有
一个类可以实现多个接口,但一个类只能继承一个抽象类
1 /**
2 * 1. 创建Animal接口
3 */
4 interface Animal {
5 // 定义睡觉抽象方法
6 void sleep();
7
8 // 定义吃饭抽象方法
9 void eat();
10 }
11
12 /**
13 * 2. 创建Dog接口继承Animal接口
14 */
15 interface Dog extends Animal {
16 // 定义游泳抽象方法
17 void swim();
18 }
19
20 /**
21 * 3. 创建HaShiQi接口继承Dog和Animal接口,实现多继承
22 */
23 interface HaShiQi extends Dog, Animal {
24 // 定义拆家抽象方法
25 void demolishedFamily();
26 }
27
28 /**
29 * 4. 创建测试类来实现接口,并且复写所有抽象方法
30 */
31 public class TestAnimal implements HaShiQi {
32
33 @Override
34 public void swim() {
35 System.out.println("哈士奇会游泳");
36 }
37
38 @Override
39 public void sleep() {
40 System.out.println("哈士奇会睡觉");
41 }
42
43 @Override
44 public void eat() {
45 System.out.println("哈士奇喜欢吃苦瓜");
46 }
47
48 @Override
49 public void demolishedFamily() {
50 System.out.println("哈士奇会拆家");
51 }
52
53 public static void main(String[] args) {
54 // 使用多态实例化对象
55 HaShiQi dog = new TestAnimal();
56 dog.eat();
57 dog.sleep();
58 dog.demolishedFamily();
59 dog.swim();
60 }
61 }
2.常用类(API)
1、Java API
是对Java预先定义的类或接口功能和函数功能的说明文档,目的是提供给开发人员进行使用帮助说明。
2、Object类
根基类,每个类都使用Object作为超类(父类),所以对象都继承实现了这个类的方法
equals方法,在Object中默认使用==比较,比较的是对象地址,然而在其他类中,对equals方法进行了重写,调用这个方法 x.equals(y) 判断x和y的内容是否相等,而不是比较地址
3、Arrays类
是操作数组工具类,里面定义了常见数组的静态方法
在文章上面有一个Arrays类的代码展示,可以进行翻阅查看,这里就不再重复书写😂😂😂😂
4、基本数据类型分装类
自动装箱:基本类型自动转换为包装类型
自动拆箱:包装类型自动转换为基本类型
5、String类
● 构造方法
public String()
public String(String str)
public String(byte[] bytes)
public String(char[] value)
● 判断功能
boolean equals(Object obj)
boolean equalsIgnoreCase(String str)
boolean contains(String str)
boolean isEmpty()
boolean startsWith(String prefix)
boolean endsWith(String suffix)
●获取功能
int length()
char charAt(int index)
int indexOf(String str)
int indexOf(String str,int fromIndex)
String substring(int start)
String substring(int start,int end)
● 转换功能
byte[] getBytes()
char[] toCharArray()
static String valueOf(char[] chs)
String toLowerCase()
String toUpperCase()
String concat(String str)
Stirng[] split(分割符)
● 替换功能
String replace(char old,char new)
String replace(String old,String new)
replaceAll(String regex, String replacement)
replaceFirst(String regex, String replacement)
● 去除字符串两空格
String trim()
6、StringBuffer类和StringBuilder类
● 添加功能
public StringBuffer append(String str)
public StringBuffer insert(int offset,String str)
● 删除功能
public StringBuffer deleteCharAt(int index)
public StringBuffer delete(int start,int end)
● 替换功能
public StringBuffer replace(int start,int end,String str)
● 反转功能
public StringBuffer reverse()
● 截取功能
public String substring(int start)
public String substring(int start,int end)
● 截取功能和前面几个功能的不同
返回值类型是String类型,本身没有发生改变
● StringBuilder类功能和StringBuffer功能完全一致, StringBuffer是线程
安全的
三者的区别:
String:是字符常量,适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer :适用多线程下在字符缓冲区进行大量操作的情况
7、Math类
数学类,常用的数学方法
package com.ffyc.javaapl.Mathdemo;
public class Math1 {
public static void main(String[] args) {
System.out.println(Math.abs(-1));//Math.abs()求求绝对值
System.out.println(Math.sqrt(9.0));//Math.sqrt()开方
System.out.println(Math.max(5,2));//求最大值
System.out.println(Math.floor(9.9));//向下取整9.0
System.out.println(Math.ceil(9.1));//向下取整10.0
System.out.println(Math.round(9.1));//9
System.out.println(Math.round(9.5));//Math.round()四舍五入取整 10
System.out.println(Math.random());//在0-1之间随机数,0<=random<1
System.out.println(Math.pow(2,3));//pow(double a, double b) a^b 8 幂次方
}
}
8、Random类
产生随机数
代码实现
import java.util.Random;
public class Random1 {
public static void main(String[] args) {
Random random=new Random();
System.out.println(random.nextBoolean());//随机产生一个boolean值
System.out.println(random.nextInt());//在int型范围内产生一个随机值
System.out.println(random.nextInt(3));//在0-2内产生一个随机值
}
}
9、Date类/Calender类/SimpleDateFormat类
Date类代表当前系统时间
Date类代码实现
import java.util.Date;
public class Datedemo1 {
public static void main(String[] args) {
Date date=new Date();//创建一个date对象,程序运行是会将当前时刻存入
System.out.println(date);
System.out.println(date.getYear()+1900);//return normalize().getYear() - 1900;
System.out.println(date.getMonth()+1);// return normalize().getMonth() - 1
System.out.println(date.getDate());//
System.out.println(date.getTime());//时间戳,自1970 1.1 0:0:0到程序运行时刻的毫秒值 1708844950270
Date date2=new Date(1708844950270L);
System.out.println(date2);//new Date(long date),传入一个毫秒值,返回一个时刻
}
}
Calender类是一个抽象类,在实际使用时实现特定的子类对象。创建对象过程对程序员来说是透明的,只需要使用getInstance方法创建
Calender类代码实现
import java.util.Calendar;
public class Calenderdemo1 {
public static void main(String[] args) {
Calendar calendar=Calendar.getInstance();//getInstance子类
// System.out.println(calendar);
System.out.println(calendar.get(Calendar.YEAR));//获取年份
System.out.println(calendar.get(Calendar.MONTH)+1);//获取月份
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
System.out.println(calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));
}
}
SimpDateFormat类
日期格式化类
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class SimpleDateFormdemo1 {
public static void main(String[] args) throws ParseException {
//把字符串日期转换为date对象
String s="2024-2-29 12:12:12 星期三";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd HH:mm:ss E");
Date date=sdf.parse(s);
System.out.println(date);
// 把date对象转换为字符串日期
Date date1=new Date();
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss E");
String s1=sdf1.format(date1);
System.out.println(s1);
}
}
10、BigInteger类/BigDecimal类
BigInteger类型的数字范围较Integer,Long类型的数字范围要大得多,它支持任意 精度的整数,也就是说在运算中 BigInteger 类型可以准确地表示任何大小的整数值而 不会丢失任何信息
import java.math.BigDecimal;
import java.math.BigInteger;
public class BigIntergedemo1 {
public static void main(String[] args) {
BigInteger a1=new BigInteger("11111111111111111111111111111111");
BigInteger a2=new BigInteger("99999999999999999999999999999999");
BigInteger a3=a1.add(a2);
BigInteger a4=a1.multiply(a2);
System.out.println(a1);
System.out.println(a2);
System.out.println(a3);
System.out.println(a4);
}
}
BigDecimal类
比double 和folat精确度要高得多
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimaldemo1 {
public static void main(String[] args) {
BigDecimal a1=new BigDecimal("0.3");
BigDecimal a2=new BigDecimal("0.1");
System.out.println(a1.add(a2));
BigDecimal a3=new BigDecimal("10");
BigDecimal a4=new BigDecimal("3");
System.out.println(a3.divide(a4,2, RoundingMode.HALF_UP));//a3/a4,a4是除数,scale是保留小数的位数,RoundingMode是舍入模式
}
}
3.集合
1.分类及功能

2.Collectiong接口常用的方法
4.IO
一、简介
流的概念:流是有起点和终点的一组有顺序的字节集合,作用是进行数据传输
流的分类
按照数据流向不同可以分为输入输出流;
按照处理数据单位不同可以分为字节流和字符流
输入流和输出流的作用
输入流:程序从数据源读取数据
输出流:将数据从程序中写入指定文件
字节流和字符流的作用
字节流:以字节为单位处理所有类型数据
字符流:以字符为单位处理纯文本文件
二、体系结构
三.IO常用方法
四.序列化和反序列化
- 对象序列化:把对象转换为字节序列(二进制数据)的过程
- 对象反序列化:把字节序列恢复为对象的过程
5.异常
1.概述
2.体系结构
3.常见异常种类
/*int [] a=new int[2];
a[3]=5;//ArrayIndexOutOfBoundsException 数组索引越界*/
/*String s="abc";
s.charAt(3);//StringIndexOutOfBoundsException 字符串索引越界*/
/*int e=9,b=0;
int c=e/b;//ArithmeticException 算数运算异常*/
/* Object s=new Integer(9);
String s1=(String) s;// ClassCastException 类型转换异常*/
//Integer.parseInt("abc"); //NumberFormatException 数字格式化异常
//String s=null;
//s.length();//NullPointerException 使用 null 中的方法或属性,一般有称为空指针
异常
4.异常处理语法
5.自定义异常

6.JDBC
jdbc连接数据库步骤:
1.在项目添加jar文件
2.加载驱动类 Class.forName("com.mysql.cj.jdbc.Driver");
3.建立与数据库的连接,获得连接对象
4.发送sql
Statement st = connection.createStatement();
5.如果执行查询操作, 接收包装查询结果
6.关闭与数据库连接
rs.close();
ps.close();
connection.close();
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Demo {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");//加载驱动类
//建立与数据库的连接,获得连接对象
String url="jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";
String user="root";
String password="root";
Connection connection= DriverManager.getConnection(url,user,password);
//发送sql
Statement st =connection.createStatement();
st.executeUpdate("insert into major(name)values('数学')");
// 关闭
st.close();
connection.close();
}
}
7.mysql数据库
1.数据库的相关概念
(1)DB:数据库(DataBase):存储数据的容器,它保存了一系列有组织的数据。
(2)DBMS:数据库管理系统(DataBase Management System) ,又称为数据库软件或数据库产品,用于创建或管理DB。
(3)应用程序与数据库服务器的关系如图所示:
2.MySQL的常用命令
查看当前所有的数据库:show databases;
选择指定的库:use + 库名
查看当前的所有表:show tables;
查看其他库的所有表:show tables from 库名;
查看mysql版本 select version();
3.SQL
(1) 概念:结构化查询语言(Structured Query Language)简称SQL,是一种特殊 目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
(2)优点:几乎所有DBMS都支持SQL,灵活使用可以进行非常复杂和高级的数据库操作。
4.DDL
(1)概念:数据(结构)定义语言DDL(Data Definition Language),是用于创建和修改数据库表结构的语言。
(2)常用的语句有:create ,alter,drop,rename
部分用法:
创建数据库并设置编码格式
CREATE DATABASE [if not exists] 数据库名 [ CHARSET utf8]
删除数据库
DROP DATABASE 数据库名 / [IF EXISTS数据库名];
修改字符集
ALTER DATABASE 数据库名 CHARSET gbk
(3)数据表概念
1、数据表
表(table)是数据存储的最常见和最简单的形式,是构成关系型数据库的基本元素。
表的最简单形式是由行和列组成,分别都包含着数据。 每个表都有一个表头和表体,表头定
义表名和列名 .表中的行被看作是文件中的记录,表中的列被看作是这些记录的字段。
2、字段
字段是表里的一列,用于保存每条记录的特定信息。如客户订单表的字段包括“订单
ID”、“姓名”、“客户ID”、“职务”、“上级”、“地区”、“运货商”、“国家”等。
数据表的一列包含了特定字段的全部信息。
3、记录
记录也被称为一行数据,是表里的一行数据。
(4)设计表的步骤
创建表的步骤:
确定表名: 学生信息 -- 学生表
确定列名: 学生的具体信息 姓名,性别,生日....
列的数据类型:
字符串型:
char(n) 长度为n的定长字符串, 例如n=5, 如果我们只存储了2个字符进去,长度依然是5,会补空格
一般用来存储长度固定的数据, 例如性别,电话.
varchar(n) 最大长度为n的变长字符串, 例如n=10,如果我们只存储了3个字符,实际长度为3
日期时间类型
date 日期--年月日
datetime 时间--年月日 时分秒
数值
整数
TINYINT 1
SMALLINT 2
MEDIUMINT 3
int 4
bigint 8
浮点:
decimal(M,D)
3,2
1.73
TEXT列字符字符串 长文本类型 例如存储新闻信息,小说...
列的约束: 列的规则
(4)主键外键及约束
主键: 在一张表中代表唯一的一条记录,不能为空,不能重复
约束:
PRIMARY KEY 设置主键约束
NOT NULL 不能为空约束
UNIQUE 唯一性约束
检查约束 设置条件 : CHECK(条件)
外键约束
主键自动增长,设置为自动增长时,只能为整数类型 :AUTO_INCREMENT
默认值 :DEFAULT default_value
字段注释: comment '注释'
(5)基本语法操作
<1>创建表
CREATE TABLE 表名(列名 数据类型 [约束] [默认值] [ 注释],......)
例如:
CREATE TABLE student(
num INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10) NOT NULL,
gender CHAR(1) NOT NULL,
birthday DATE,
phone CHAR(11) NOT NULL UNIQUE,
address VARCHAR(30),
height DECIMAL(3,2) CHECK(height<2.60),
reg_time DATETIME
)
<2>删除表
DROP TABLE [if exists ]表名
例如,
DROP TABLE student
<3>修改表名
RENAME TABLE 旧表名 TO 新表名
例如,
RENAME TABLE student TO stu
RENAME TABLE stu TO student
<4> 复制表结构
CREATE TABLE 新表名 LIKE 被复制表名; 例如,
CREATE TABLE stu LIKE student
5.DML
(1)概念:数据操纵语言DML(Data Manipulation Language)
(2)常用语句:insert,delete,update
(3)语句使用方法:
<1>insert插入数据
方式1: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n);
方式2: INSERT INTO 表名 set 列名1=值1,..列名n=值n;
方式3: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n),(值1,值2…..,值n);
方式4:INSERT INTO 表名(列1,列2……,列n) 查询语句(查询的列数与插入列数匹配)
<2>update 更新数据
UPDATE 表名 SET 列名 = ‘新值’WHERE 条件
<3>delete 删除数据
DELETE FROM 表名 WHERE 条件
TRUNCATE TABLE 表名;清空整张表
6.DQL
(1)概念:DQL(Data Query Language)数据查询语言查询是使用频率最高的一个操作, 可以从一个表中查询数据,也可以从多个表中查询数据。
(2)基本查询:
<1>语法:select 查询列表 from 表名;
<2>特点:查询列表可以是:表中的字段、常量、表达式、函数;查询的结果是一个虚拟的表格
(3)查询结果处理:
特定列查询:select column1,column2 from table
全部列查询: select * from table
算数运算符:+ - * /
排除重复行: select distinct column1,column2 from table
查询函数:select 函数; / 例如version()
(4)函数
<1>定义:类似于java中的方法,将一组逻辑语句事先在数据库中定义好,可以直接调用
<2>分类:
单行函数:如concat、length、ifnull等
分组函数:做统计使用,又称为统计函数、聚合函数、组函数
字符函数:
length():获取参数值的字节个数
char_length()获取参数值的字符个数
concat(str1,str2,.....):拼接字符串
upper()/lower():将字符串变成大写/小写
substring(str,pos,length):截取字符串 位置从1开始
instr(str,指定字符):返回子串第一次出现的索引,如果找不到返回0
trim(str):去掉字符串前后的空格或子串,trim(指定子串 from 字符串)
lpad(str,length,填充字符):用指定的字符实现左填充将str填充为指定长度
rpad(str,length,填充字符):用指定的字符实现右填充将str填充为指定长度
replace(str,old,new):替换,替换所有的子串
单行函数功能
<1>逻辑处理语句
case when 条件 then 结果1 else 结果2 end; 可以有多个when
ifnull(被检测值,默认值)函数检测是否为null,如果为null,则返回指定的值,否则返回
原本的值
if函数:if else的 效果 if(条件,结果1,结果2)
<2>数学函数
round(数值):四舍五入
ceil(数值):向上取整,返回>=该参数的最小整数
floor(数值):向下取整,返回<=该参数的最大整数
truncate(数值,保留小数的位数):截断,小数点后截断到几位
mod(被除数,除数):取余,被除数为正,则为正;被除数为负,则为负
rand():获取随机数,返回0-1之间的小数
<3>日期函数
now():返回当前系统日期+时间
curdate():返回当前系统日期,不包含时间
curtime():返回当前时间,不包含日期
可以获取指定的部分,年、月、日、小时、分钟、秒
YEAR(日期列),MONTH(日期列),DAY(日期列) ,HOUR(日期列) ,MINUTE(日期列)
SECOND(日期列)
str_to_date(字符串格式日期,格式):将日期格式的字符转换成指定格式的日期
date_format(日期列,格式):将日期转换成字符串
datediff(big,small):返回两个日期相差的天数
分组函数
<1>功能:用作统计使用,又称为聚合函数或统计函数或组函数
<2>分类:
sum 求和、avg 平均值、max 最大值、min 最小值、count 计数
(非空)
注意:
1.sum,avg一般用于处理数值型max,min,count可以处理任何类型
2.以上分组函数都忽略null值
3.count函数的一般使用count(*)用作统计行数
4.和分组函数一同查询的字段要求是group by后的字段
(5)条件查询
<1>where查询
使用WHERE 子句,将不满足条件的行过滤掉,WHERE 子句紧随 FROM 子句。
语法:select <结果> from <表名> where <条件>
比较
=, != 或<>, >, <, >=, <=
逻辑运算
and 与
or 或
not 非
<2>模糊查询
LIKE
:是否匹配于一个模式 一般和通配符搭配使用,可以判断字符型数值
或数值型.
通配符: % 任意多个字符
between and 两者之间,包含临界值;
in 判断某字段的值是否属于in列表中的某一项
IS NULL(为空的)或 IS NOT NULL(不为空的)
<3>UNION 的语法如下:
[SQL 语句 1]
UNION
[SQL 语句 2]
UNION ALL 的语法如下:
[SQL 语句 1]
UNION ALL
[SQL 语句 2]
当使用union 时,mysql 会把结果集中重复的记录删掉,而使用union all ,
mysql 会把所有的记录返回,且效率高于union 。
<4>排序
查询结果排序,使用 ORDER BY 子句排序 order by 排序列 ASC/DESC
asc代表的是升序,desc代表的是降序,如果不写,默认是升序
order by子句中可以支持单个字段、多个字段
<5>数量限制
limit子句:对查询的显示结果限制数目 (sql语句最末尾位置)
SELECT * FROM table LIMIT offset rows;
SELECT * from table LIMIT 0,5;
<6>分组查询
语法:
select 分组函数,列(要求出现在group by的后面)
from 表
[where 筛选条件]
group by 分组的列表
[having 分组后的筛选]
[order by 子句]
注意:查询列表比较特殊,要求是分组函数和group by后出现的字段
分组查询中的筛选条件分为两类:
3.多表设计_关联查询
数据库设计范式
1.第一范式(确保每列保持原子性) :第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就 说明该数据库表满足了第一范式。
2. 第二范式就是要有主键,要求其他字段都依赖于主键。
原因:
(1)没有主键就没有唯一性,没有唯一性在集合中就定位不到这行记录,所以要主键。
(2)其他字段为什么要依赖于主键?因为不依赖于主键,就找不到他们。更重要的是,其
他字段组成的这行记录和主键表示的是同一个东西,而主键是唯一的,它们只需要依
赖于主键,也就成了唯一的。
3.第三范式,确保每列都和主键列直接相关,而不是间接相关,要求一个数据库表中不包含
已在其它表中包含的非主关键字信息
关联查询
<1>内连接(inner join)
把满足了条件的两张表中的交集数据查询出来
语法:Select 结果 from 表1,表2 where 表1.column1 = 表2.column2
多表关联
<2>左外连接(left join)
select 结果 from
表1 left join 表2 on
表1.column1 = 表2.column2
多表关联
<2>右外连接(right join)
select 结果 from
表1 right join 表2 on
表1.column1=表2.column2
子查询
(1)含义:出现在其他语句中的select语句,称为子查询或内查询;外部的查询语句,称为主查询或外查询.
(2)
分类:
按子查询出现的位置:
from后面:支持表子查询
where:支持标量子查询,列子查询
按功能、结果集的行列数不同:
标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
表子查询(结果集一般为多行多列)
相关文章:

面向对象, 常用类, 集合, 异常, JDBC, mysql数据库 复习
1.面向对象 (1)面向过程和面向对象 ● 面向过程的程序设计思想 (procedure -Oriented Programming),简称POP ● 关注的焦点是过程:过程就是操作数据的步骤。如果某个过程的实现代码重复出 现,那么就可…...

js取数组最大值之Math.max、Math.max.apply
js取数组最大值之Math.max、Math.max.apply Math.maxMath.max.applyapply()第一个参数为什么可以是null 最小值同理 Math.max Math.max(n1,n2,n3,…,nX) 支持传递多个参数,带有较大的值的那个数 Math.max(2,5,3,6,2,4,2,15,9,6,0,1)Math.max.apply apply() 语法&a…...

各种中间件的安装
文章目录 20232306mysql的wondows安装 2023 2306 mysql的wondows安装 常用mysql教程 springboot整合druid连接池SpringBoot配置Druid连接池 mysql的wondows安装 MySQL学习笔记 01、MySQL安装 这个是安装的具体思路 win10 安装 mysql 5.7 msi版的教程图文详解 这个是安装的…...

【Mysql】多表查询、隐式内链接、显式内连接、左外连接、右外连接
多表查询 什么是多表查询 •DQL: 查询多张表,获取到需要的数据 •比如 我们要查询家电分类下 都有哪些商品,那么我们就需要查询分类与商品这两张表 数据准备 创建db3_2 数据库 -- 创建 db3_2 数据库,指定编码 CREATE DATABASE db3_2 CHARACTER SET utf8;创建分类表与商品表 …...

Linux驱动开发(三)--新字符设备驱动开发 LED驱动开发升级
1、新字符设备驱动原理 使用 register_chrdev 函数注册字符设备的时候只需要给定一个主设备号即可,但是这样会 带来两个问题 需要我们事先确定好哪些主设备号没有使用 会将一个主设备号下的所有次设备号都使用掉,比如现在设置 LED 这个主设备号为200&…...

MCU的最佳存储方案CS创世 SD NAND
大家都知道MCU是一种"麻雀"虽小,却"五脏俱全"的主控。它的应用领域非常广泛,小到手机手表,大到航空航天的设备上都会用到MCU.市面上目前几个主流厂商有意法半导体(其中最经典的一款就是STM32系列)…...

40岁学习java是否需要报班学习?
在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」, 点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!!应该不需要。各种公开免费的…...

Vitis Accelerated Libraries 学习笔记--OpenCV 运行测试
目录 1. 简介 2. 实例测试 2.1 实例介绍 2.2 创建工程 2.2.1 创建工程 2.2.2 获取路径 2.2.3 设置路径 2.2.4 打开工程 2.2.5 添加文件 2.2.6 启动 GUI 2.2.7 配置 csim 参数 3 常见错误 3.1 核心共享库报错 4. 总结 1. 简介 在《Vitis Accelerated Libraries …...

加固三防平板如何提高轨道交通系统的运营效率?
在当今快节奏的社会中,轨道交通系统作为城市交通的重要组成部分,其运营效率的提升对于缓解交通拥堵、满足人们的出行需求以及促进城市的发展具有至关重要的意义。而加固三防平板作为一种先进的技术设备,正逐渐在轨道交通领域发挥着关键作用&a…...

Django 靓号管理系统:实现登录功能
本文将详细介绍如何在 Django 靓号管理系统中实现登录功能,包括用户认证、验证码生成、以及中间件的使用。我们将逐步展示所有相关代码,并附带详细注释。 1. 项目结构 首先,让我们看一下项目的基本结构: number ├── manage.py ├── monaco.ttf ├── number │ …...

【Solr 学习笔记】Solr 源码启动教程
Solr 源码启动教程 本教程记录了如何通过 IDEA 启动并调试 Solr 源码,从 Solr9 开始 Solr 项目已由 ant 方式改成了 gradle 构建方式,本教程将以 Solr 9 为例进行演示,IDE 选择使用 IntelliJ IDEA。 Solr github 地址:https://gi…...

Java中的事件驱动编程模型
Java中的事件驱动编程模型 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我将为大家介绍Java中的事件驱动编程模型。事件驱动编程模型是一种以事件为核心驱…...

Python 语法基础一
1.变量 python 中变量很简单,不需要指定数据类型,直接使用等号定义就好。python变量里面存的是内存地址,也就是这个值存在内存里面的哪个地方,如果再把这个变量赋值给另一个变量,新的变量通过之前那个变量知道那个变量…...

从零开始:Spring Boot 中使用 Drools 规则引擎的完整指南
规则引擎作用 规则引擎主要用于将业务逻辑从应用程序代码中分离出来,提高系统的灵活性和可维护性。规则引擎通过预定义的规则来处理输入数据并做出相应的决策,从而实现业务逻辑的自动化和动态调整。 例如 门店信息校验:美团点评在门店信息…...

工业边缘计算网关
1 介绍 HINETG系列边缘计算网关(Linux操作系统),是华辰智通的—款面向工业现场设备接入、数据采集、设备监控的工业级边缘计算网关。采用ARM Cortex-A7 800MHz高性能CPU,拥有以太网、串口、CAN口、IO口等丰富的接口,支持以太网、…...

【C++ 初阶路】--- 类和对象(末)
目录 一、const成员1.1 取地址及const取地址操作符重载 二、再谈构造函数2.1 构造函数体赋值2.2 初始化列表2.3 explicit关键字 三、static成员3.1 概念3.2 特性 四、友元4.1 友元函数4.2 友元类 五、内部类六、匿名对象 一、const成员 将const修饰的“成员函数”称之为const成…...

bable 【实用教程】
简介 bable 用于将 ES6 的语法编译为 ES5 只关心语法,不关心 API 是否正确。不处理模块化(webpack 会处理) 搭建开发环境 安装相关的包 npm i babel/cli babel/core babel/preset-env新建文件 .babelrc,内容为 { "presets…...

Android中使用startActivityForResult启动活动
Android中使用startActivityForResult启动活动 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在本文中,我们将深入探讨Android开发中使用startActi…...

NineData和华为云在一起!提供一站式智能数据库DevOps平台
以GuassDB数据库为底座 NineData和华为云一起 为企业提供 一站式智能数据库DevOps平台 帮助开发者 高效、安全地完成 数据库SQL审核 访问控制、敏感数据保护等 日常数据库相关开发任务 NineData 智能数据管理平台 NineData 作为新一代的云原生智能数据管理平台…...

深入解析 Redisson分布式锁看门狗机制
一、Redisson分布式锁概述 1.1 分布式锁的意义 在分布式系统中,多个节点可能同时访问共享资源,导致数据不一致或竞态条件。分布式锁通过协调不同节点对共享资源的访问,确保数据的一致性和并发访问的安全性。 1.2 Redisson分布式锁的优势 …...

Apache Arrow 和数据的未来:开放标准推动人工智能发展
Apache Arrow 是一种开源列式内存格式,适用于平面数据和分层数据。在现代数据湖中,开放数据格式(如 Apache Arrow)位于现代对象存储的存储层中。这些格式成为对象存储中的对象。 在最新版本中,Apache Arrow 宣布计划从…...

Vue项目生产环境的打包优化
Vue项目生产环境的打包优化 前言 在这篇文章我们讨论Vue项目生产环境的打包优化,并按步骤展示实际优化过程中的修改和前后对比。 背景 刚开始的打包体积为48.71M 优化 步骤一:删除viser-vue viser-vue底层依赖antv/g2等库一并被删除,…...

oracle数据库之使用Java程序调用存储过程(二十四)
在Oracle数据库中,你可以使用Java程序来调用存储过程。这通常涉及几个步骤:首先,确保你的Java环境能够连接到Oracle数据库;其次,使用JDBC(Java Database Connectivity)来调用存储过程。 以下是…...

西电953总分第一、专业课第一考研上岸
今年上岸西电杭研院网信院网络与信息安全专业,总分370分,专业课116分,分别是总分第一名,专业课第一名,感谢研梦的953叶学姐,非常负责,本硕大佬学姐,当年密码学38分选手(满…...

pytorch-模型训练
目录 1. 模型训练的基本步骤1.1 train、test数据下载1.2 train、test数据加载1.3 Lenet5实例化、初始化loss函数、初始化优化器1.4 开始train和test 2. 完整代码 1. 模型训练的基本步骤 以cifar10和Lenet5为例 1.1 train、test数据下载 使用torchvision中的datasets可以方便…...

Linux /proc目录总结
1、概念 在Linux系统中,/proc目录是一个特殊的文件系统,通常被称为"proc文件系统"或"procfs"。这个文件系统以文件系统的方式为内核与进程之间的通信提供了一个接口。/proc目录中的文件大多数都提供了关于系统状态的信息࿰…...

【JavaEE】浅谈线程(二)
线程 线程的常见属性 线程属性可以通过下面的表格查看。 •ID 是线程的唯⼀标识,不同线程不会重复 • 名称是各种调试⼯具⽤到(如jconsoloe) • 状态表示线程当前所处的⼀个情况,下⾯我们会进⼀步说明 • 优先级高的线程理论上来…...

爬虫:爬取知乎热榜一级评论及回答2024不包含翻页
一、先上结果(注:本文仅为兴趣爱好探究,请勿进行商业利用或非法研究,负责后果自负,与作者无关) 1、爬标题及其具体内容 2、抓标题下的对应回答 3、爬取对应一级评论 二、上流程 1、获取cookies(相信哥哥姐姐…...

AI 编程探索- iOS动态标签控件
需求分析: 标签根据文字长度,自适应标签居中显示扩展 超过内容显示范围,需要换行显示,且保持居中显示 AI实现过程 提问: 回答: import UIKit import SnapKitclass DynamicLabelsContainerView: UIView…...

计算机网络——数据链路层(数据链路层概述及基本问题)
链路、数据链路和帧的概念 数据链路层在物理层提供服务的基础上向网络层提供服务,其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。 链路(…...