mysql的基礎語句和外鍵查詢及其語句詳解(推薦)

思路:雙指針思路可以嗎,我就直接找G,如果后一個是1就cnt++,如果不是數(shù)字,用一個指針i指向G,另一個指針j移動,當不是G時停止,統(tǒng)計G的個數(shù),如果是奇數(shù)個同時G的下一個是1,cnt++,如果為偶數(shù)同時G的下一個是1,就用那唯一一次機會G的國特抵消一次,cnt++,此后不再對偶數(shù)個G進行cnt++,同時把i移動到j指向G位置,就這樣一直遍歷字符串;
s = input()
cnt = 0
king_used = False
i = 0
while i < len(s):
if s[i] == 'G':
if i + 1 < len(s):
if s[i + 1] == '1':
cnt += 1
i += 2
continue
elif s[i + 1] in ['2', '3']:
i += 2
continue
else:
j = i + 1
while j < len(s) and s[j] == 'G':
j += 1
g_count = j - i
if g_count % 2 == 1:
cnt += 1
elif g_count % 2 == 0 and not king_used:
cnt += 1
king_used = True
i = j
else:
i += 1
else:
i += 1
print(cnt)
轉c++我不知道為啥我c++代碼過不了,但是python嫩果
一、MySQL 基礎語句
1. 數(shù)據(jù)庫操作 創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE school_db;
刪除數(shù)據(jù)庫
DROP DATABASE school_db;
選擇數(shù)據(jù)庫
USE school_db;
2. 表操作 創(chuàng)建表
CREATE TABLE students (
student_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT,
gender ENUM('男', '女'),
enrollment_date DATE DEFAULT CURRENT_DATE
);刪除表
DROP TABLE students;
修改表結構
ALTER TABLE students ADD COLUMN email VARCHAR(100); ALTER TABLE students MODIFY COLUMN age TINYINT; ALTER TABLE students DROP COLUMN gender;
3. CRUD 操作
插入數(shù)據(jù)
INSERT INTO students (name, age, gender)
VALUES ('張三', 18, '男'), ('李四', 19, '女');查詢數(shù)據(jù)
-- 基本查詢 SELECT * FROM students; -- 條件查詢 SELECT name, age FROM students WHERE age > 18; -- 排序 SELECT * FROM students ORDER BY age DESC; -- 分組 SELECT gender, COUNT(*) FROM students GROUP BY gender; -- 分頁 SELECT * FROM students LIMIT 5 OFFSET 0; -- 第一頁,每頁5條
更新數(shù)據(jù)
UPDATE students SET age = 20 WHERE name = '張三';
刪除數(shù)據(jù)
DELETE FROM students WHERE student_id = 1;
二、外鍵與關聯(lián)查詢
1. 外鍵概念
外鍵(Foreign Key)用于建立表與表之間的關聯(lián)關系,確保數(shù)據(jù)完整性。
2. 創(chuàng)建帶外鍵的表
-- 班級表
CREATE TABLE classes (
class_id INT AUTO_INCREMENT PRIMARY KEY,
class_name VARCHAR(50) NOT NULL,
teacher VARCHAR(50)
);
-- 學生表(帶外鍵)
CREATE TABLE students (
student_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT,
class_id INT,
FOREIGN KEY (class_id) REFERENCES classes(class_id)
ON DELETE SET NULL
ON UPDATE CASCADE
);3. 外鍵約束選項
ON DELETE CASCADE
: 主表記錄刪除時,從表相關記錄自動刪除
ON DELETE SET NULL
: 主表記錄刪除時,從表外鍵設為NULL
ON DELETE RESTRICT
: 拒絕刪除主表記錄(默認)
ON UPDATE CASCADE
: 主表主鍵更新時,從表外鍵同步更新
4. 關聯(lián)查詢
內連接(INNER JOIN)
SELECT s.name, s.age, c.class_name FROM students s INNER JOIN classes c ON s.class_id = c.class_id;
左連接(LEFT JOIN)
SELECT s.name, c.class_name FROM students s LEFT JOIN classes c ON s.class_id = c.class_id;
右連接(RIGHT JOIN)
SELECT s.name, c.class_name FROM students s RIGHT JOIN classes c ON s.class_id = c.class_id;
全連接(FULL JOIN) - MySQL通過UNION實現(xiàn)
SELECT s.name, c.class_name FROM students s LEFT JOIN classes c ON s.class_id = c.class_id UNION SELECT s.name, c.class_name FROM students s RIGHT JOIN classes c ON s.class_id = c.class_id;
三、完整示例
1. 創(chuàng)建數(shù)據(jù)庫和表
-- 創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE school_management;
USE school_management;
-- 創(chuàng)建班級表
CREATE TABLE classes (
class_id INT AUTO_INCREMENT PRIMARY KEY,
class_name VARCHAR(50) NOT NULL,
teacher VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 創(chuàng)建學生表(帶外鍵)
CREATE TABLE students (
student_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT CHECK (age BETWEEN 10 AND 30),
gender ENUM('男', '女'),
class_id INT,
FOREIGN KEY (class_id) REFERENCES classes(class_id)
ON DELETE SET NULL
ON UPDATE CASCADE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 創(chuàng)建成績表(多外鍵)
CREATE TABLE scores (
score_id INT AUTO_INCREMENT PRIMARY KEY,
student_id INT,
subject VARCHAR(50),
score DECIMAL(5,2),
exam_date DATE,
FOREIGN KEY (student_id) REFERENCES students(student_id)
ON DELETE CASCADE
ON UPDATE CASCADE
);2. 插入測試數(shù)據(jù)
-- 插入班級數(shù)據(jù)
INSERT INTO classes (class_name, teacher) VALUES
('一年級一班', '王老師'),
('一年級二班', '李老師'),
('二年級一班', '張老師');
-- 插入學生數(shù)據(jù)
INSERT INTO students (name, age, gender, class_id) VALUES
('張三', 18, '男', 1),
('李四', 19, '女', 1),
('王五', 17, '男', 2),
('趙六', 20, '女', NULL);
-- 插入成績數(shù)據(jù)
INSERT INTO scores (student_id, subject, score, exam_date) VALUES
(1, '數(shù)學', 90.5, '2023-06-15'),
(1, '語文', 85.0, '2023-06-16'),
(2, '數(shù)學', 92.0, '2023-06-15'),
(3, '英語', 88.5, '2023-06-17');3. 復雜查詢示例
查詢每個班級的學生人數(shù)
SELECT c.class_name, COUNT(s.student_id) AS student_count FROM classes c LEFT JOIN students s ON c.class_id = s.class_id GROUP BY c.class_id;
查詢學生及其班級和成績(多表連接)
SELECT s.name, s.age, c.class_name, sc.subject, sc.score FROM students s LEFT JOIN classes c ON s.class_id = c.class_id LEFT JOIN scores sc ON s.student_id = sc.student_id ORDER BY s.name, sc.subject;
查詢平均分高于85的班級
SELECT c.class_name, AVG(sc.score) AS avg_score FROM classes c JOIN students s ON c.class_id = s.class_id JOIN scores sc ON s.student_id = sc.student_id GROUP BY c.class_id HAVING avg_score > 85;
使用子查詢
-- 查詢沒有參加任何考試的學生 SELECT name FROM students WHERE student_id NOT IN (SELECT DISTINCT student_id FROM scores);
四、外鍵管理
1. 查看外鍵約束
SELECT
TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME,
REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
REFERENCED_TABLE_SCHEMA = 'school_management';2. 刪除外鍵約束
ALTER TABLE students DROP FOREIGN KEY students_ibfk_1;
3. 添加外鍵約束
ALTER TABLE students ADD CONSTRAINT fk_class FOREIGN KEY (class_id) REFERENCES classes(class_id) ON DELETE SET NULL ON UPDATE CASCADE;
到此這篇關于mysql的基礎語句和外鍵查詢及其語句的文章就介紹到這了,更多相關mysql的基礎語句和外鍵查詢及其語句內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
如何修改Linux服務器中的MySQL數(shù)據(jù)庫密碼
這篇文章主要介紹了如何修改Linux服務器中的MySQL數(shù)據(jù)庫密碼問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
mysql數(shù)據(jù)庫插入速度和讀取速度的調整記錄
由于項目變態(tài)需求;需要在一個比較短時間段急劇增加數(shù)據(jù)庫記錄(兩三天內,由于0增加至4億)。在整個過程調優(yōu)過程非常艱辛2012-07-07
MySQL四種日志binlog/redolog/relaylog/undolog詳解
undo?log主要存儲的也是邏輯日志,比如我們要insert一條數(shù)據(jù)了,那undo?log會記錄的一條對應的delete日志,我們要update一條記錄時,它會記錄一條對應相反的update記錄,這篇文章主要介紹了MySQL四種日志binlog/redolog/relaylog/undolog,需要的朋友可以參考下2024-08-08
MySQL數(shù)據(jù)庫多表操作通關指南(外鍵約束和多表聯(lián)合查詢)
看再多的資料不如自己親自動手實戰(zhàn),往往實戰(zhàn)才能滲透知識,下面這篇文章主要給大家介紹了關于MySQL數(shù)據(jù)庫多表操作的相關資料,包含外鍵約束和多表聯(lián)合查詢等,需要的朋友可以參考下2022-06-06

